#include <cstdio>
const int N = 1003;
const int M = 10003;
int n, m, fa[N], anc[N], last[N];
int n1, u1[M], v1[M];
int n2, u2[M], v2[M];
bool bo[N];
inline int ufs(const int &u) {
  if (anc[u] == u) return u;
  return anc[u] = ufs(anc[u]);
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 1; i <= m; ++i) {
    int a, b;
    char c;
    scanf("%d%d %c", &a, &b, &c);
    if (c == 'T') {
      ++n1;
      u1[n1] = b, v1[n1] = a;
      bo[a] = true;
    } else {
      ++n2;
      u2[n2] = b, v2[n2] = a;
      bo[b] = true;
    }
  }
  
  int rt = -1;
  for (int i = 1; i <= n && !~rt; ++i)
    if (!bo[i]) rt = i;
  if (!~rt) {
    puts("NIE");
    return 0;
  }
  
  for (int i = 1; i <= n; ++i) fa[i] = -1;
  fa[rt] = 0;
  for (int i = 1; i <= n; ++i)
    if (i != rt) last[i] = rt;
  for (int t = n - 1; t; --t) {
    for (int i = 1; i <= n; ++i) {
      bo[i] = false;
      if (~fa[i]) bo[i] = true;
      anc[i] = i;
    }
    for (int i = 1; i <= n1; ++i) {
      int x = u1[i], y = v1[i];
      if (!~fa[x] && !~fa[y]) anc[ufs(x)] = ufs(y);
      if (!~fa[x]) bo[y] = true;
    }
    for (int i = 1; i <= n2; ++i) {
      int x = u2[i], y = v2[i];
      if (ufs(x) == ufs(y)) bo[x] = true;
    }
    rt = -1;
    for (int i = 1; i <= n && !~rt; ++i)
      if (!bo[i]) rt = i;
    if (!~rt) {
      puts("NIE");
      return 0;
    }
    fa[rt] = last[rt];
    for (int i = 1; i <= n; ++i)
      if (!~fa[i] && ufs(i) == ufs(rt))
        last[i] = rt;
  }
  for (int i = 1; i <= n; ++i)
    printf("%d\n", fa[i]);
  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 | #include <cstdio> const int N = 1003; const int M = 10003; int n, m, fa[N], anc[N], last[N]; int n1, u1[M], v1[M]; int n2, u2[M], v2[M]; bool bo[N]; inline int ufs(const int &u) { if (anc[u] == u) return u; return anc[u] = ufs(anc[u]); } int main() { scanf("%d%d", &n, &m); for (int i = 1; i <= m; ++i) { int a, b; char c; scanf("%d%d %c", &a, &b, &c); if (c == 'T') { ++n1; u1[n1] = b, v1[n1] = a; bo[a] = true; } else { ++n2; u2[n2] = b, v2[n2] = a; bo[b] = true; } } int rt = -1; for (int i = 1; i <= n && !~rt; ++i) if (!bo[i]) rt = i; if (!~rt) { puts("NIE"); return 0; } for (int i = 1; i <= n; ++i) fa[i] = -1; fa[rt] = 0; for (int i = 1; i <= n; ++i) if (i != rt) last[i] = rt; for (int t = n - 1; t; --t) { for (int i = 1; i <= n; ++i) { bo[i] = false; if (~fa[i]) bo[i] = true; anc[i] = i; } for (int i = 1; i <= n1; ++i) { int x = u1[i], y = v1[i]; if (!~fa[x] && !~fa[y]) anc[ufs(x)] = ufs(y); if (!~fa[x]) bo[y] = true; } for (int i = 1; i <= n2; ++i) { int x = u2[i], y = v2[i]; if (ufs(x) == ufs(y)) bo[x] = true; } rt = -1; for (int i = 1; i <= n && !~rt; ++i) if (!bo[i]) rt = i; if (!~rt) { puts("NIE"); return 0; } fa[rt] = last[rt]; for (int i = 1; i <= n; ++i) if (!~fa[i] && ufs(i) == ufs(rt)) last[i] = rt; } for (int i = 1; i <= n; ++i) printf("%d\n", fa[i]); return 0; } | 
 
            
         English
                    English