#include <bits/stdc++.h> using namespace std; const int MAX=10010; int du[MAX];//度、 int head[MAX];//点 //结构体:边 struct Edge{ int u,v,to,next; }; Edge edges[MAX]; int edgeCnt=0;//边的数量 void addEdge(int u,int v){ edges[edgeCnt].v=v; edges[edgeCnt].next=head[u]; head[u]=edgeCnt++; } int main(){ int T; cin>>T; while (T--){ int m=0; int n; cin>>n; map<string,int>mp; edgeCnt=0; memset(head,-1, sizeof(head)); memset(du,0, sizeof(du)); string s1,s2; for (int i = 0; i < n; ++i) { cin>>s1>>s2; if (mp[s1]==0){ mp[s1]=++m; } if (mp[s2]==0){ mp[s2]=++m; } addEdge(mp[s2],mp[s1]); du[mp[s1]]++; } queue<int> q; for (int i = 0; i <= m; ++i) { if (du[i]==0){ q.push(i); } } int cnt=0; while (q.size()>0){//拓扑排序 int u = q.front(); q.pop(); cnt++; for (int i = head[u]; i !=-1; i=edges[i].next) { int v=edges[i].v; if(!--du[v]){ q.push(v); } } } if (cnt==m){ cout<<"Passed"<<endl; } else{ cout<<"Failed"<<endl; } } return 0; }