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
#include <cstdio>
#include <vector>

const int MAXN = 1005;

std::vector<int> v[MAXN], kol, ord;

int in[MAXN];
int out[MAXN];

int main() {
	int n, m, a, b;
	char c;
	
	scanf("%d%d", &n, &m);
	
	for (int i=0; i<m; i++) {
		scanf("%d%d%*c%c", &a, &b, &c);
		
		if (c=='T') {
			v[a].push_back(b);
			in[b]++;
		}
		else {
			v[b].push_back(a);
			in[a]++;
		}
	}
	
	for (int i=1; i<=n; i++)
		if (in[i]==0) {
			kol.push_back(i);
		}
	
	while (!kol.empty()) {
		a = kol.back();
		kol.pop_back();
		ord.push_back(a);
		
		for (int x : v[a]) {
			in[x]--;
			
			if (in[x]==0)
				kol.push_back(x);
		}
	}
	
	if (ord.size()!=n) {
		printf("NIE\n");
		return 0;
	}
	
	while (!ord.empty()) {
		a = ord.back();
		ord.pop_back();
		out[ord.back()] = a;
	}
	
	for (int i=1; i<=n; i++)
		printf("%d\n", out[i]);
	
	return 0;
}
// ADG