POJ 1830

来源:互联网 发布:旅游cms开源系统源码 编辑:程序博客网 时间:2024/05/09 23:16
#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;}