#include <bits/stdc++.h>
using namespace std;
const int INF = 1e9;
const int MAXN = 1e6 + 10;
const int MAXC = 1e5 + 10;
int n, c;
vector<int> to[2][MAXN];
vector<int> ans;
void fail() {
  cout << "IMPOSSIBLE\n";
  exit(0);
}
int dfs(int v, int mn, int mx) {
  for (int q = int(0); q < int(2); ++q) sort(to[q][v].begin(), to[q][v].end());
  if (to[0][v].size() > 0 && ((*to[0][v].rbegin()) > mx)) fail();
  if (to[1][v].size() > 0 && ((*to[1][v].rbegin()) > mx)) fail();
  if (to[0][v].size() > 0 && to[1][v].size() > 0 &&
      to[1][v][0] <= (*to[0][v].rbegin()))
    fail();
  if (to[0][v].size() == 0) {
    ans.push_back(v);
    int newmn = mn;
    if (to[1][v].size() > 0) newmn = max(newmn, (*to[1][v].rbegin()));
    if (newmn <= v) return v;
    return dfs(v + 1, newmn, mx);
  } else {
    int newmx = mx;
    if (to[1][v].size() > 0) newmx = to[1][v][0] - 1;
    int newmn = (*to[0][v].rbegin());
    int cnt = dfs(v + 1, newmn, newmx);
    if (to[1][v].size() > 0 && cnt >= to[1][v][0]) fail();
    ans.push_back(v);
    newmn = mn;
    if (to[1][v].size() > 0) newmn = max(newmn, (*to[1][v].rbegin()));
    if (newmn <= cnt) return cnt;
    return dfs(cnt + 1, newmn, mx);
  }
}
int main() {
  scanf("%d%d", &n, &c);
  for (int i = int(0); i < int(c); ++i) {
    int a, b;
    char s[10];
    scanf("%d%d %s", &a, &b, s);
    if (a >= b) fail();
    to[s[0] == 'R'][a].push_back(b);
  }
  dfs(1, n, n);
  assert(ans.size() == n);
  for (int i = int(0); i < int(ans.size()); ++i) printf("%d ", ans[i]);
  printf("\n");
  return 0;
}
