1 //Result:wizmann 1830 Accepted 736K 32MS G++ 1411B 2012-06-17 01:01:45
2 #include <cstdio>
3 #include <cstdlib>
4 #include <cstring>
5 #include <algorithm>
6 #include <iostream>
7 #include <bitset>
8
9 using namespace std;
10
11 #define print(x) cout<<x<<endl
12 #define input(x) cin>>x
13 #define SIZE 32
14
15 int mat[SIZE][SIZE];
16 int n;
17
18 /*
19 void printMatrix()
20 {
21 for(int i=0;i<n;i++)
22 {
23 for(int j=0;j<=n;j++)
24 {
25 printf("%d ",mat[i][j]);
26 }
27 puts("");
28 }
29 puts("");
30 }
31 * */
32
33 int gauss()
34 {
35 int i,j;
36 for(i=0,j=0;i<n&&j<n;j++)
37 {
38 int k=i;
39 for(;k<n;k++)
40 {
41 if(mat[k][j]) break;
42 }
43
44 if(mat[k][j])
45 {
46 for(int l=j;l<=n;l++)
47 {
48 swap(mat[i][l],mat[k][l]);
49 }
50 //printMatrix();
51 for(int l=i+1;l<n;l++)
52 {
53 if(l!=i && mat[l][j])
54 {
55 for(int r=j;r<=n;r++)
56 {
57 mat[l][r]^=mat[i][r];
58 }
59 }
60 }
61 i++;
62 }
63 }
64 for(int k=i;k<n;k++)
65 {
66 if(mat[k][n]) return -1;
67 }
68 return 1<<(n-i);
69 }
70
71 int main()
72 {
73 freopen("input.txt","r",stdin);
74 int T;
75 input(T);
76 int start[SIZE],end[SIZE];
77 while(T--)
78 {
79 int a,b;
80 input(n);
81 memset(mat,0,sizeof(mat));
82 for(int i=0;i<n;i++) input(start[i]);
83 for(int i=0;i<n;i++) input(end[i]);
84 for(int i=0;i<n;i++) start[i]^=end[i];
85 while(input(a>>b) && a+b)
86 {
87 mat[b-1][a-1]=1;
88 }
89 for(int i=0;i<n;i++)
90 {
91 mat[i][n]=start[i];
92 mat[i][i]=1;
93 }
94 int res=gauss();
95 if(res==-1) print("Oh,it's impossible~!!");
96 else print(res);
97 }
98 return 0;
99 }
100