同一堆里的每个豆子是相互独立的,sg[i]表示第i堆里一个豆子的sg值。
sg[i]=mex( sg[j]^sg[k] ) ;
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
int n;
int p[30],sg[30];
int use[1000];
int main()
{
int T;scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&p[i]);
sg[n]=0;
int ans=0;
for(int i=n-1;i>=1;i--)
{
memset(use,0,sizeof(use));
for(int j=i+1;j<=n;j++)
for(int k=j;k<=n;k++)
use[sg[j]^sg[k]]=1;
int j=0;while(use[j]) j++;
sg[i]=j;if(p[i]%2) ans^=sg[i];
}
if(ans==0)
{
puts("-1 -1 -1");puts("0");
continue;
}
int tot=0;
for(int i=1;i<n;i++)
{
for(int j=i+1;j<=n;j++)
for(int k=j;k<=n;k++)
if((ans^sg[i]^sg[j]^sg[k])==0)
{
tot++;
if(tot==1)
printf("%d %d %d\n",i-1,j-1,k-1);
}
}
printf("%d\n",tot);
}
return 0;
}