//Lukasz Janeczko Krakow
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int g(int u, int l, int &n, vector <bool> &V, vector < pair <int,int> > &Edges)
{
    if(l==2)
        {
            int v1, v2;
            for(int i=0; i<n; i++)
                if(!V[i])
                    v1=i;
            for(int i=n; i<2*n; i++)
                if(!V[i])
                    v2=i;
            pair <int,int> r1, r2;
            r1={v1,v2};
            r2={v2,v1};
            //cout << v1 << " " << v2 << " " << Edges[0].first << " " << Edges[0].second <<endl;
            if(binary_search(Edges.begin(),Edges.end(),r1))
                return 2;
            if(binary_search(Edges.begin(),Edges.end(),r2))
                return 0;
            return 1;
        }
    int e=0;
    for(int i=0; i<n; i++)
        if(!V[(1-u)*n+i])
            {
                V[(1-u)*n+i]=true;
                e=max(e,2-g((u+1)%2,l-1,n,V,Edges));
                V[(1-u)*n+i]=false;
            }
    //cout << u << " " << l << " " << e <<endl;
    return e;
}
int main()
{
    ios_base::sync_with_stdio(false);
    int Z, n, m;
    cin >> Z;
    while(Z--)
        {
            cin >> n >> m;
            if(n>5)
                {
                    vector <int> Deg_in(2*n,0); vector <int> Deg_out(2*n,0);
                    for(int h=0; h<m; h++)
                        {
                            int a, b; char w;
                            cin >> a >> w >> b;
                            if(w=='<')
                                {
                                    Deg_in[a-1]++;
                                    Deg_out[b-1+n]++;
                                }
                            else
                                {
                                    Deg_in[b-1+n]++;
                                    Deg_out[a-1]++;
                                }
                        }
                    int f=-1; bool good=true;                  //0-Bajtek, 1-Bitek
                    for(int i=0; i<n && f==-1; i++)
                        if(Deg_in[i]==n)
                            f=1;
                    for(int i=n; i<2*n && f==-1; i++)
                        if(Deg_in[i]==n)
                            f=0;
                    if(f==-1)
                        {
                            for(int i=0; i<n && good; i++)
                                if(Deg_in[i]==0)
                                    good=false;
                            for(int i=n; i<2*n && good; i++)
                                if(Deg_out[i]==0)
                                    good=false;
                            if(good)
                                f=1;
                        }
                    if(f==0)
                        cout << "WYGRANA" <<endl;
                    else
                    if(f==1)
                        cout << "PRZEGRANA" <<endl;
                    else
                    if(f==-1)
                        cout << "REMIS" <<endl;
                }
            else
                {
                    vector < pair <int,int> > Edges(m);
                    for(int h=0; h<m; h++)
                        {
                            int a, b; char w;
                            cin >> a >> w >> b;
                            if(w=='<')
                                Edges[h]={b-1+n,a-1};
                            else
                                Edges[h]={a-1,b-1+n};
                        }
                    sort(Edges.begin(),Edges.end());
                    vector <bool> V(2*n,false);
                    int ans=g(0,2*n,n,V,Edges);
                    if(ans==0)
                        cout << "PRZEGRANA" <<endl;
                    else
                    if(ans==1)
                        cout << "REMIS" <<endl;
                    else
                    if(ans==2)
                        cout << "WYGRANA" <<endl;
                }
        }
    return 0;
}
        | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 | //Lukasz Janeczko Krakow #include <iostream> #include <vector> #include <algorithm> using namespace std; int g(int u, int l, int &n, vector <bool> &V, vector < pair <int,int> > &Edges) { if(l==2) { int v1, v2; for(int i=0; i<n; i++) if(!V[i]) v1=i; for(int i=n; i<2*n; i++) if(!V[i]) v2=i; pair <int,int> r1, r2; r1={v1,v2}; r2={v2,v1}; //cout << v1 << " " << v2 << " " << Edges[0].first << " " << Edges[0].second <<endl; if(binary_search(Edges.begin(),Edges.end(),r1)) return 2; if(binary_search(Edges.begin(),Edges.end(),r2)) return 0; return 1; } int e=0; for(int i=0; i<n; i++) if(!V[(1-u)*n+i]) { V[(1-u)*n+i]=true; e=max(e,2-g((u+1)%2,l-1,n,V,Edges)); V[(1-u)*n+i]=false; } //cout << u << " " << l << " " << e <<endl; return e; } int main() { ios_base::sync_with_stdio(false); int Z, n, m; cin >> Z; while(Z--) { cin >> n >> m; if(n>5) { vector <int> Deg_in(2*n,0); vector <int> Deg_out(2*n,0); for(int h=0; h<m; h++) { int a, b; char w; cin >> a >> w >> b; if(w=='<') { Deg_in[a-1]++; Deg_out[b-1+n]++; } else { Deg_in[b-1+n]++; Deg_out[a-1]++; } } int f=-1; bool good=true; //0-Bajtek, 1-Bitek for(int i=0; i<n && f==-1; i++) if(Deg_in[i]==n) f=1; for(int i=n; i<2*n && f==-1; i++) if(Deg_in[i]==n) f=0; if(f==-1) { for(int i=0; i<n && good; i++) if(Deg_in[i]==0) good=false; for(int i=n; i<2*n && good; i++) if(Deg_out[i]==0) good=false; if(good) f=1; } if(f==0) cout << "WYGRANA" <<endl; else if(f==1) cout << "PRZEGRANA" <<endl; else if(f==-1) cout << "REMIS" <<endl; } else { vector < pair <int,int> > Edges(m); for(int h=0; h<m; h++) { int a, b; char w; cin >> a >> w >> b; if(w=='<') Edges[h]={b-1+n,a-1}; else Edges[h]={a-1,b-1+n}; } sort(Edges.begin(),Edges.end()); vector <bool> V(2*n,false); int ans=g(0,2*n,n,V,Edges); if(ans==0) cout << "PRZEGRANA" <<endl; else if(ans==1) cout << "REMIS" <<endl; else if(ans==2) cout << "WYGRANA" <<endl; } } return 0; } | 
 
            
         English
                    English