#include <bits/stdc++.h>
using namespace std;
int parent[100001];
int child[100001];
char subtree[100001];
int cid[100001];
int ais[1000002];
int aie[1000002];
int N, C;
bool cmp(int a, int b) {
  if (parent[a] == parent[b]) {
    if (subtree[a] == subtree[b]) return child[a] < child[b];
    return subtree[a] < subtree[b];
  }
  return parent[a] < parent[b];
}
vector<int> ans;
int getLast(int i, int j) {
  int first = ais[i];
  int last;
  for (last = first; parent[cid[last]] == i && subtree[cid[last]] == 'L';
       last++)
    ;
  if (last > first) {
    int nxt = getLast(i + 1, child[cid[last - 1]]);
    ans.push_back(i);
    if (nxt == -1) return -1;
    if ((nxt >= child[cid[last]]) && (parent[cid[last]] == i)) return -1;
    int rlast = -1;
    if (nxt < j) rlast = max(rlast, j);
    if (parent[cid[last]] == i) rlast = max(rlast, child[cid[aie[i]]]);
    if (rlast > -1)
      return getLast(nxt + 1, rlast);
    else
      return nxt;
  } else {
    ans.push_back(i);
    for (; parent[cid[last]] == i; last++)
      ;
    if (last > first)
      return getLast(i + 1, max(child[cid[last - 1]], j));
    else if (i == j)
      return i;
    else
      return getLast(i + 1, j);
  }
}
int main() {
  cin.tie(0);
  ios::sync_with_stdio(0);
  string s;
  cin >> N >> C;
  for (int i = 0; i < C; i++) {
    cin >> parent[i] >> child[i] >> s;
    parent[i]--;
    child[i]--;
    if (parent[i] >= child[i]) {
      cout << "IMPOSSIBLE\n";
      return 0;
    }
    subtree[i] = s[0];
    cid[i] = i;
  }
  parent[C] = 2000000;
  child[C] = 2000000;
  subtree[C] = ' ';
  cid[C] = C;
  C++;
  sort(cid, cid + C, cmp);
  for (int i = 0; i <= N; i++) ais[i] = C - 1;
  for (int i = (C - 1); i >= 0; i--)
    if (parent[cid[i]] != 2000000) ais[parent[cid[i]]] = i;
  for (int i = 0; i < C; i++)
    if (parent[cid[i]] != 2000000) aie[parent[cid[i]]] = i;
  if (getLast(0, N - 1) != -1) {
    for (int i = 0; i < N; i++) cout << ans[i] + 1 << " ";
    cout << "\n";
  } else
    cout << "IMPOSSIBLE\n";
  return 0;
}
