模拟移动的过程。
#include<bits/stdc++.h>
using namespace std;
class point{
public:stack<int>a;int top(){return a.top();}void push(int x){a.push(x);}void pop(){a.pop();}int size(){return a.size();}
};
int main()
{int t;cin>>t;while(t--){point a[4];int n,m;cin>>n>>m;for(int i=n;i>=1;i--)a[1].push(i);int ok=1;while(m--){int x,y;cin>>x>>y;if(a[x].size()>0){if(a[y].size()==0){a[y ].push(a[x ].top());a[x ].pop();}else if(a[y ].top()>a[x ].top()){//cout<<a[x ].top()<<':'<<a[y ].top()<<endl;a[y ].push(a[x ].top());a[x ].pop();}else ok=0;}else ok=0;}if(ok)cout<<"legal"<<endl;elsecout<<"illegal"<<endl;}
}