理解:一个局面的sg值等于形成它的子局面的异或。
int fg[110];
int sg(int x)
{
if (fg[x] != -1)return fg[x];
unordered_set<int> s;
f(i, 0, x - 1)//遍历半角矩阵
f(j, i, x - 1)
s.insert(sg(i) ^ sg(j));//一个新局面的sg值等于子局面的异或
for (int i = 0;;++i)//mex
if (!s.count(i))return fg[x] = i;
}
int main()
{
int n;
cin >> n;
int x;
int ans = 0;
memset(fg, -1, sizeof fg);//记忆化数组
f(i, 1, n)
{
cin >> x;
ans ^= sg(x);
}
if (ans == 0)puts("No");
else puts("Yes");
return 0;
}