#include #include #include #include #include #include #include using namespace std; map,bool>memo; bool naive(vectorP) { for(int i=0;ileaff(n,true); for(int p:P)leaff[p]=false; vectorleaf; for(int i=0;iidx(n,0); for(int k=0;k>k&1)idx[leaf[k]]=-1; int sz=0; for(int k=0;knP; for(int k=0;kG[2<<17]; int dfs(int u,int d) { if(G[u].empty())return d%2==0; if(G[u].size()==1)return dfs(G[u][0],d+1); for(int v:G[u]) { int t=dfs(v,1); if(t==2)return 2; if(t==0)return 0; } return 2; } bool solve(vectorP) { for(int i=0;ideg(n,0); deg[0]=2; for(int p:P)deg[p]++; for(int i=0;i=1)return false; else return true; } string dfs_hash(int u) { if(G[u].empty())return "()"; vectort; for(int v:G[u])t.push_back(dfs_hash(v)); sort(t.begin(),t.end()); string s="("; for(string v:t)s+=v; s+=")"; return s; } setvis; void gen(int id,vectorP) { if(id==P.size()) { const int n=P.size()+1; for(int i=0;iP(N-1); gen(0,P); } */ int T;cin>>T; for(;T--;) { int N;cin>>N; vectorP(N-1); for(int&p:P)cin>>p,p--; cout<<(solve(P)?"First\n":"Second\n"); } }