#include <bits/stdc++.h>
using namespace std;
int N, C;
struct node {
  int max, L = INT_MIN, R = INT_MAX;
} nds[1000000];
void fail() {
  puts("IMPOSSIBLE");
  exit(0);
}
vector<int> odr;
int inorder(int n, int nMax) {
  int cn = n + 1;
  if (cn <= nds[n].L) cn = inorder(cn, nds[n].L);
  if (cn > nds[n].R) fail();
  odr.push_back(n);
  int R = max(nMax, nds[n].max);
  if (cn <= R) cn = inorder(cn, R);
  return cn;
}
int main() {
  scanf("%d%d", &N, &C);
  for (int c = 0; c < int(C); c++) {
    char s[10];
    int a, b;
    scanf("%d%d%s", &a, &b, s);
    a--;
    b--;
    if (b <= a) fail();
    nds[a].max = max(nds[a].max, b);
    if (s[0] == 'L') {
      nds[a].L = max(nds[a].L, b);
    } else {
      nds[a].R = min(nds[a].R, b);
    }
  }
  inorder(0, N - 1);
  for (int x : odr) printf("%d ", x + 1);
  putchar('\n');
}
