int f[N],sg[N],hash[N];
void getSG(
int n)
{
int i,j;
memset(sg,
0,
sizeof(sg));
for(i=
1;i<=n;i++)
{
memset(hash,
0,
sizeof(hash));
for(j=
1;f[j]<=i;j++)
hash[sg[i-f[j]]]=
1;
for(j=
0;j<=n;j++)
{
if(hash[j]==
0)
{
sg[i]=j;
break;
}
}
}
}
int s[
110],sg[
10010],n;
int SG_dfs(
int x)
{
int i;
if(sg[x]!=-
1)
return sg[x];
bool vis[
110];
memset(vis,
0,
sizeof(vis));
for(i=
0;i<n;i++)
{
if(x>=s[i])
{
SG_dfs(x-s[i]);
vis[sg[x-s[i]]]=
1;
}
}
int e;
for(i=
0;;i++)
if(!vis[i])
{
e=i;
break;
}
return sg[x]=e;
}