#include #include #include #include #define REP(i,a,b) for(i=a;i= 0) return dp[odd][even][edge][target][myT][opT][myP][opP]; if(odd + even == 0){ if(myP == target) res = 1; assert(myP == opP); return dp[odd][even][edge][target][myT][opT][myP][opP] = res; } if(edge) res |= 1-solve(odd, even, edge^1, target^1, opT, myT, opP, myP); if(odd >= 2) res |= 1-solve(odd-2, even+1, edge, target^1, opT, myT, opP, myP); if(odd >= 2 && myT > 0 && myP == 1 && even+1 > 0) res |= 1-solve(odd-2+1, even+1-1, edge, target^1, opT, myT-1, opP, myP^1); if(odd >= 2 && myT > 0 && myP == 0 && odd-2 > 0) res |= 1-solve(odd-2-1, even+1+1, edge, target^1, opT, myT-1, opP, myP^1); if(odd >= 1 && even >= 1) res |= 1-solve(odd, even-1, edge^1, target^1, opT, myT, opP, myP); if(odd >= 1 && even >= 1 && myT > 0 && myP == 1 && even-1 > 0) res |= 1-solve(odd+1, even-1-1, edge^1, target^1, opT, myT-1, opP, myP^1); if(odd >= 1 && even >= 1 && myT > 0 && myP == 0 && odd > 0) res |= 1-solve(odd-1, even-1+1, edge^1, target^1, opT, myT-1, opP, myP^1); if(even >= 2) res |= 1-solve(odd, even-1, edge, target^1, opT, myT, opP, myP); if(even >= 2 && myT > 0 && myP == 1 && even-1 > 0) res |= 1-solve(odd+1, even-1-1, edge^1, target^1, opT, myT-1, opP, myP^1); if(even >= 2 && myT > 0 && myP == 0 && odd > 0) res |= 1-solve(odd-1, even-1+1, edge^1, target^1, opT, myT-1, opP, myP^1); if(even >= 1) res |= 1-solve(odd, even-1, edge^1, target^1, opT, myT, opP, myP); if(even >= 1 && myT > 0 && myP == 1 && even-1 > 0) res |= 1-solve(odd+1, even-1-1, edge^1, target^1, opT, myT-1, opP, myP^1); if(even >= 1 && myT > 0 && myP == 0 && odd > 0) res |= 1-solve(odd-1, even-1+1, edge^1, target^1, opT, myT-1, opP, myP^1); if(odd >= 1 && myP == 0) res |= 1-solve(odd-1, even, edge^1, target^1, opT, myT, opP, myP^1); if(odd >= 1 && myP == 1) res |= 1-solve(odd-1, even, edge , target^1, opT, myT, opP, myP^1); if(odd >= 1 && myP == 0 && myT > 0 && even > 0) res |= 1-solve(odd-1+1, even-1, edge^1, target^1, opT, myT-1, opP, myP); if(odd >= 1 && myP == 1 && myT > 0 && odd-1 > 0) res |= 1-solve(odd-1-1, even+1, edge , target^1, opT, myT-1, opP, myP); if(odd >= 1 && opP == 0) res |= 1-solve(odd-1, even, edge^1, target^1, opT, myT, opP^1, myP); if(odd >= 1 && opP == 1) res |= 1-solve(odd-1, even, edge , target^1, opT, myT, opP^1, myP); if(odd >= 1 && opP == 0 && myT > 0 && myP == 0 && odd-1 > 0) res |= 1-solve(odd-1-1, even+1, edge^1, target^1, opT, myT-1, opP^1, myP^1); if(odd >= 1 && opP == 1 && myT > 0 && myP == 0 && odd-1 > 0) res |= 1-solve(odd-1-1, even+1, edge , target^1, opT, myT-1, opP^1, myP^1); if(odd >= 1 && opP == 0 && myT > 0 && myP == 1 && even > 0) res |= 1-solve(odd-1+1, even-1, edge^1, target^1, opT, myT-1, opP^1, myP^1); if(odd >= 1 && opP == 1 && myT > 0 && myP == 1 && even > 0) res |= 1-solve(odd-1+1, even-1, edge , target^1, opT, myT-1, opP^1, myP^1); if(myT > 0 && myP == 0 && opP == 0 && odd > 0) res |= 1-solve(odd-1, even, edge^1, target^1, opT, myT-1, 0, 1); if(myT > 0 && myP == 0 && opP == 1 && odd > 0) res |= 1-solve(odd-1, even, edge^1, target^1, opT, myT-1, 1, 1); if(myT > 0 && myP == 1 && opP == 0 && odd > 0) res |= 1-solve(odd-1, even, edge^1, target^1, opT, myT-1, 1, 1); if(myT > 0 && myP == 1 && opP == 1 && odd > 0) res |= 1-solve(odd-1, even, edge , target^1, opT, myT-1, 0, 1); if(myT > 0 && myP == 0 && opP == 0 && even > 0) res |= 1-solve(odd, even-1, edge^1, target^1, opT, myT-1, 0, 0); if(myT > 0 && myP == 0 && opP == 1 && even > 0) res |= 1-solve(odd, even-1, edge^1, target^1, opT, myT-1, 1, 0); if(myT > 0 && myP == 1 && opP == 0 && even > 0) res |= 1-solve(odd, even-1, edge^1, target^1, opT, myT-1, 1, 0); if(myT > 0 && myP == 1 && opP == 1 && even > 0) res |= 1-solve(odd, even-1, edge , target^1, opT, myT-1, 0, 0); return dp[odd][even][edge][target][myT][opT][myP][opP] = res; } int main(){ int i,j,k,l,m,n,a,b; int T, N, M, P, X[20100], Y[20100]; int odd, even, ind[10010], s[10010], first, second, tar; rep(i,20) rep(j,20) rep(k,2) rep(l,2) rep(m,20) rep(n,20) rep(a,2) rep(b,2) dp[i][j][k][l][m][n][a][b] = -1; /* rep(i,20) rep(j,20) if(i+j < 18) rep(k,2) rep(l,2) rep(m,20) if(m<19) rep(a,2) rep(b,2){ if((i+a+b)%2) continue; if( solve(i+2,j,k,l,m,m,a,b) != solve(i,j,k,l,m,m,a,b) ) printf("A %d %d %d %d %d %d %d %d\n",i,j,k,l,m,m,a,b); if( solve(i,j+2,k,l,m,m,a,b) != solve(i,j,k,l,m,m,a,b) ) printf("B %d %d %d %d %d %d %d %d\n",i,j,k,l,m,m,a,b); if( solve(i,j,k,l,m,m,a,b) != solve(i,j,k,l,m+1,m+1,a,b) ) printf("C %d %d %d %d %d %d %d %d\n",i,j,k,l,m,m,a,b); } return 0; */ assert( scanf("%d",&T)==1 ); assert( 0<=T && T<=100 ); while(T--){ assert( scanf("%d%d%d",&N,&M,&P)==3 ); assert( 2<=N&&N<=7777&&0<=M&&M<=10000&&0<=P&&P<=10000 ); rep(i,M) assert( scanf("%d%d",X+i,Y+i) ), X[i]--, Y[i]--; if(0){ rep(i,M){ if(X[i] > Y[i]) k=X[i], X[i]=Y[i], Y[i]=k; assert( 0<=X[i] && X[i] 1) P = 1; if(odd > 10) odd = 8 + (odd % 2); if(even > 10) even = 8 + (even % 2); k = solve(odd, even, l, tar, P, P, first, second); if(k) puts("First"); else puts("Second"); } return 0; }