#include typedef struct Edge { struct Edge *next; int v; } edge; int solve(int N, int par[]) { int u, w, flag; static int dp[200001]; static edge *adj[200001], e[200001], *p; for (u = 1; u <= N; u++) adj[u] = NULL; for (w = 2; w <= N; w++) { u = par[w]; e[w].v = w; e[w].next = adj[u]; adj[u] = &(e[w]); } for (u = N; u >= 1; u--) { if (adj[u] == NULL) { dp[u] = 0; continue; } else if (adj[u]->next == NULL) { w = adj[u]->v; if (dp[w] <= 1) dp[u] = dp[w] ^ 1; else dp[u] = dp[w]; continue; } for (p = adj[u], flag = 0; p != NULL; p = p->next) { w = p->v; if (dp[w] == 0) flag++; } if (flag > 0) return 1; dp[u] = 2; } if (dp[1] == 1) return 1; else return 0; } int main() { int T, i, N, p[200001]; scanf("%d", &T); while (T--) { scanf("%d", &N); for (i = 2; i <= N; i++) scanf("%d", &(p[i])); if (solve(N, p) != 0) printf("First\n"); else printf("Second\n"); } fflush(stdout); return 0; }