#include<iostream>
#include<vector>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn = 33;
int a[maxn][maxn];
int s[maxn];
int e[maxn];
int b[maxn];
int n;
bool find(int line,int u)
{
for(int k=line;k<=n;k++)
{
if(a[k][u])
{
for(int i=u;i<=n;i++)
{
swap(a[line][i],a[k][i]);
}
swap(b[line],b[k]);
return true;
}
}
return false;
}
int start()
{
int line = 1;
int re = 0;
for(int u=1;u<=n;u++)
{
if(!find(line,u))
{
re++;
continue;
}
for(int k=line+1;k<=n;k++)
{
if(a[k][u])
{
for(int i=u;i<=n;i++)
{
a[k][i]^=a[line][i];
}
b[k]^=b[line];
}
}
line++;
}
for(int u=line;u<=n;u++)
{
if(b[u])
{
return 0;
}
}
int ans=1;
for(int i=1;i<=re;i++)
{
ans<<=1;
}
return ans;
}
int main()
{
int T;
cin>>T;
while(T--)
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>s[i];
}
for(int i=1;i<=n;i++)
{
cin>>e[i];
}
for(int i=1;i<=n;i++)
{
b[i]= s[i]^e[i];
}
int now,to;
memset(a,0,sizeof(a));
while(cin>>now>>to)
{
if(!now && !to)
{
break;
}
else
{
a[to][now]=1;
}
}
for(int i=1;i<=n;i++)
{
a[i][i]=1;
}
int temp = start();
if(temp)
{
cout<<temp<<endl;
}
else
{
cout<<"Oh,it's impossible~!!"<<endl;
}
}
return 0;
}
POJ 1830
最新推荐文章于 2020-12-31 17:20:39 发布