#include <bits/stdc++.h>
using namespace std;
const int INF = 0x3f3f3f3f;
const long long LINF = 0x3f3f3f3f3f3f3f3fll;
const int MAXN = 1e6 + 10;
const int LOG = 21;
vector<int> vLeft[MAXN], vRight[MAXN];
int highest[MAXN];
int rmq[LOG][MAXN];
int ord[MAXN];
int pos[MAXN];
int n, c;
void dfs(int v) {
  highest[v] = v;
  for (int nxt : vLeft[v]) {
    if (highest[nxt] == 0) dfs(nxt);
    highest[v] = max(highest[v], highest[nxt]);
  }
  for (int nxt : vRight[v]) {
    if (highest[nxt] == 0) dfs(nxt);
    highest[v] = max(highest[v], highest[nxt]);
  }
}
inline int get_rmq(int l, int r) {
  if (l > r) return r;
  int len = r - l + 1;
  int b = 31 - __builtin_clz(len);
  return max(rmq[b][l], rmq[b][r - (1 << b) + 1]);
}
bool go(int l, int r, int at) {
  int maxleft = 0;
  int root = l;
  for (int nxt : vLeft[root]) maxleft = max(maxleft, highest[nxt]);
  while (maxleft) {
    int nxt = get_rmq(l + 1, maxleft);
    if (nxt == maxleft) break;
    maxleft = nxt;
  }
  int qleft = (maxleft == 0 ? 0 : maxleft - (l + 1) + 1);
  if (maxleft > r) return 0;
  if (qleft > 0) {
    if (!go(l + 1, maxleft, at)) return 0;
  }
  ord[at + qleft] = root;
  pos[root] = at + qleft;
  if (max(maxleft, l) < r)
    if (!go(max(maxleft, l) + 1, r, at + qleft + 1)) return 0;
  return 1;
}
int main() {
  scanf("%d%d", &n, &c);
  bool ok = 1;
  for (int a = 0; a < c; ++a) {
    char side[10];
    int u, v;
    scanf("%d%d%s", &u, &v, side);
    if (side[0] == 'L')
      vLeft[u].push_back(v);
    else
      vRight[u].push_back(v);
    if (u >= v) ok = 0;
  }
  for (int v = 1; v <= n; ++v) {
    if (highest[v] == 0) dfs(v);
  }
  for (int a = 1; a <= n; ++a) rmq[0][a] = highest[a];
  for (int log = 1; log < LOG; ++log) {
    for (int a = 1; a <= n; ++a) {
      int r = min(a + (1 << (log - 1)), n);
      rmq[log][a] = max(rmq[log - 1][a], rmq[log - 1][r]);
    }
  }
  ok &= go(1, n, 0);
  for (int v = 1; v <= n; ++v) {
    for (int nxt : vLeft[v])
      if (pos[v] < pos[nxt]) {
        ok = 0;
      }
    for (int nxt : vRight[v])
      if (pos[v] > pos[nxt]) {
        ok = 0;
      }
  }
  if (!ok)
    printf("IMPOSSIBLE\n");
  else {
    for (int a = 0; a < n; ++a) printf("%d ", ord[a]);
    printf("\n");
  }
  return 0;
}
