#include <bits/stdc++.h>
#define pi pair < pair <int, int >, char > 
#define x(n,m,h) pair < pair <int ,int >, char > (pair <int, int> (n,m), h)
#define st first 
#define nd second
//brut
//tablica zerowalna?? - po prostu zamiast dodawac bede tylko ususwał
using namespace std;

int const N = 1e3 + 5 + 1e4;
int ile_go_nie_chce_na_przodka[N] = {0}, ile_on_chce_przodkow[N] = {0}, fau[N] = {0}, size[N] = {0}, ojciec[N] = {0}, czyuru[N] = {0};
vector <int> kto_go_chce_na_przodka[N], kogo_on_nie_chce[N];

vector <pi> kra[N];
vector <int> vs[N];
bool czy_ok = 1;

void go(const int &a){
	while (fau[fau[a]] != fau[a]){
		fau[a] = fau[fau[a]];
	}
}

void join(const int &a,const int &b){
	go(a);
	go(b);
	if (fau[a] == fau[b])return;
	if(size[fau[a]] > size[fau[b]]){
		size[fau[a]] += size[fau[b]];
		fau[fau[b]] = fau[a];
		fau[b] = fau[a];
	}
	else {
		size[fau[b]] += size[fau[a]];
		fau[fau[a]] = fau[b];
		fau[a] = fau[b];
	}
}
int glog = 0;
void rek(vector <int> V, vector <pi> kr, int x){
	int n = V.size();
	if (n != 1){
		//cerr <<"RUNDA START: \n";
		//cerr <<"n: " << n << '\n';
	}
	int m = kr.size();
	bool q = 0;
	for (int i : V)size[i] = 3 + glog;
	++glog;
	for (int i : V){
	//if (n != 1)	cerr << i <<' ';
		if (ile_go_nie_chce_na_przodka[i] <= 0 && ile_on_chce_przodkow[i] <= 0){
			q = 1;
			ojciec[i] = x;
			x = i;
			for (int u : kto_go_chce_na_przodka[i]){
				--ile_on_chce_przodkow[u];
			}
			for (int u : kogo_on_nie_chce[i]){
				if(size[u] == 2+glog)--ile_go_nie_chce_na_przodka[u];
			}
		}
	}
	//if (n != 1)cerr << '\n';
	if (q == 0){
		//if (n != 1)cerr <<"tusiepopsulo\n";
		//else if(n == 1)cerr <<"to naprawde jest zle\n";
		czy_ok = 0;
		return;
	}
	//cerr <<"A\n";
	for (int i : V){
		fau[i] = i;
		size[i] = 1;
		kra[i].clear();
		vs[i].clear();
		czyuru[i] = 0;
	}
	
	for (auto u : kr){
		if (ojciec[u.st.st] != -1)continue;
		if (ojciec[u.st.nd] != -1)continue;
		if(u.nd == 'T'){
			join(u.st.st, u.st.nd);	
		}
	}
	for (int i : V){
		if (ojciec[i] != -1)continue;
		go(i);
		vs[fau[i]].push_back(i);
	}
	for (auto u : kr){
		if (ojciec[u.st.st] != -1)continue;
		if (ojciec[u.st.nd] != -1)continue;
		go(u.st.st);
		go(u.st.nd);
		if (fau[u.st.st] == fau[u.st.nd]){
			kra[fau[u.st.st]].push_back(u);
		}
		else{
			if(u.nd == 'T'){
				--ile_on_chce_przodkow[u.st.st];
			}
			else {
				--ile_go_nie_chce_na_przodka[u.st.nd];
			}
		}
	}
	/*//cerr <<"CO SIEDZI W fau\n";
	for (int i  : V){
		//cerr << fau[i] << '\n';
	}*/
	//cerr <<"C\n";
	for (int i : V){
		if (ojciec[i] != -1)continue;
		go(i);
		if(!czyuru[fau[i]]){
			rek(vs[fau[i]], kra[fau[i]], x);
		}
		czyuru[fau[i]] = 1;		
	}
	//cerr <<"B\n";
}
int main(){
	ios_base::sync_with_stdio(0);
	//cerr <<"BASEA\n";
	int n, m;
	cin >> n >> m;
	fill(ojciec, ojciec+n+2, -1);
	for (int i = 0; i < n; ++i)	{
		vs[0].push_back(i+1);	
	}
	for (int i = 0; i < m; ++i){
		int a, b;
		char c;
		cin >> a >> b >> c;
		if (a == 213 && b == 613 ){
			//cerr <<a <<' ' << b << ' ' << c <<'\n';
		}
		else if (a == 613 && b == 213){
		
			//cerr <<a <<' ' << b << ' ' << c <<'\n';
		}
		kra[0].push_back(x(a,b,c));
	}
	//cerr <<"ALA\n";
	for (auto u : kra[0]){
		if(u.nd == 'T'){
			++ile_on_chce_przodkow[u.st.st];
			kto_go_chce_na_przodka[u.st.nd].push_back(u.st.st);
		}
		else {
			kogo_on_nie_chce[u.st.st].push_back(u.st.nd);
			++ile_go_nie_chce_na_przodka[u.st.nd];
		}
	}
	//cerr <<"RTI\n";
	rek(vs[0], kra[0], 0);
	//cerr <<"potum\n";
	bool pra = 1;
	//cerr <<"fh\n";
	for (int i = 1; i <= n; ++i){
		if(ojciec[i] == -1){
			pra = 0;
		}
	}
	//cerr <<"JESTEM TUTAJ\n";
	if (!czy_ok){
		cout <<"NIE\n";	
	}
	else {
		for (int i  = 1; i <= n; ++i){
			cout << ojciec[i] << '\n';
		}
		//cout <<"TAK\n";
	}
	return 0;
}
