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
#include <iostream>
#include <string>
#include <algorithm>
#include <sstream>
#include <vector>
#include <iterator>
using namespace std;
struct talia {
	int numer;
	vector<int> wygrywa_z;
	vector<int> przegrywa_z;
	talia(int numer_) {
		numer = numer_;
	}
};
void usunPolaczenia(int a, vector<talia>*v) {
	for (int i = 0; i < v->size(); i++) {
		int hehe = v->at(i).przegrywa_z.size();
		for (int j = 0; j < v->at(i).przegrywa_z.size(); j++) {
			if (v->at(i).przegrywa_z[j] == a) 
				v->at(i).przegrywa_z.erase(v->at(i).przegrywa_z.begin() +j);
		}
		for (int j = 0; j < v->at(i).wygrywa_z.size(); j++) {
			if (v->at(i).wygrywa_z[j] == a) 
				v->at(i).wygrywa_z.erase(v->at(i).wygrywa_z.begin() + j);
		}
	}
}
vector<int> najmniej_wygranych(vector<talia> v) {
	vector<int> min_pos;
	int min = v[0].wygrywa_z.size();
	min_pos.push_back(0);
	for (int i = 1; i < v.size(); i++) {
		if (v[i].wygrywa_z.size() > min) {
			min = v[i].wygrywa_z.size();
			min_pos.clear();
			min_pos.push_back(i);
		}
		else if (v[i].wygrywa_z.size() == min) min_pos.push_back(i);
	}
	return min_pos;
}

vector<int> najwiecej_przegranych(vector<talia> v) {
	vector<int> max_pos;
	int max = v[0].przegrywa_z.size();
	max_pos.push_back(0);
	for (int i = 1; i < v.size(); i++) {
		if (v[i].przegrywa_z.size() < max) {
			max = v[i].przegrywa_z.size();
			max_pos.clear();
			max_pos.push_back(i);
		}
		else if(v[i].przegrywa_z.size() == max) max_pos.push_back(i);
	}
	return max_pos;
}

int main(int argc, char** argv) {
	int i;
	cin >> i;
	for (; i > 0; i--) {
		vector<talia> talie_1;
		vector<talia> talie_2;
		int numer_talii, ilosc_talii, talie_nieremisujace, a, b;
		string w;
		cin >> ilosc_talii >> talie_nieremisujace;

		for (int j = 0; j < ilosc_talii; j++) {
			talie_1.push_back(talia(j));
			talie_2.push_back(talia(j));
		}
		for(int j = 0;j<talie_nieremisujace;j++){
			cin >> a >> w >> b;
			if (w == "<"){
				talie_1.at(a - 1).przegrywa_z.push_back(b - 1);
				talie_2.at(b - 1).wygrywa_z.push_back(a - 1);
			}
			if (w == ">"){
				talie_2.at(b - 1).przegrywa_z.push_back(a - 1);
				talie_1.at(a - 1).wygrywa_z.push_back(b - 1);
			}
		}

		for (int j = talie_1.size()-1; j > 0; j--) {
			vector<int> b_najwiecej_przegranych, b_najmniej_wygranych, roznicab;
			b_najwiecej_przegranych = najwiecej_przegranych(talie_2);
			b_najmniej_wygranych = najmniej_wygranych(talie_2);
			set_intersection(b_najmniej_wygranych.begin(), b_najmniej_wygranych.end(), b_najwiecej_przegranych.begin(), b_najwiecej_przegranych.end(), back_inserter(roznicab));
			if (!roznicab.empty()) {
				usunPolaczenia(talie_2[roznicab[0]].numer, &talie_1);
				talie_2.erase(talie_2.begin() + roznicab[0], talie_2.begin() + roznicab[0] + 1);
			}
			vector<int> a_najwiecej_przegranych, a_najmniej_wygranych, roznicaa;
			a_najwiecej_przegranych = najwiecej_przegranych(talie_1);
			a_najmniej_wygranych = najmniej_wygranych(talie_1);
			set_intersection(a_najmniej_wygranych.begin(), a_najmniej_wygranych.end(), a_najwiecej_przegranych.begin(), a_najwiecej_przegranych.end(), back_inserter(roznicaa));
			if (!roznicaa.empty()){
				usunPolaczenia(talie_1[roznicab[0]].numer, &talie_2);
				talie_1.erase(talie_1.begin() + roznicaa[0], talie_1.begin() + roznicaa[0]+1);
			}
		}
		if (talie_1[0].przegrywa_z.size() == 0 && talie_2[0].przegrywa_z.size() == 0 && talie_1[0].wygrywa_z.size() == 0 && talie_2[0].wygrywa_z.size() == 0)
			cout << "REMIS" << endl;
		if (talie_1[0].przegrywa_z.size() == 0 && talie_2[0].przegrywa_z.size() == 1 && talie_1[0].wygrywa_z.size() == 1 && talie_2[0].wygrywa_z.size() == 0)
			cout << "WYGRANA" << endl;
		if (talie_1[0].przegrywa_z.size() == 1 && talie_2[0].przegrywa_z.size() == 0 && talie_1[0].wygrywa_z.size() == 0 && talie_2[0].wygrywa_z.size() == 1)
			cout << "PRZEGRANA" << endl;
	}
	return 0;
}