#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1E6 + 10;
vector<int> sub[MAXN][2];
int N, C;
int ch[MAXN][2];
int V = 1;
bool dfs(int cur, int upr) {
  vector<int>& lft = sub[cur][0];
  vector<int>& rgt = sub[cur][1];
  sort(lft.begin(), lft.end());
  sort(rgt.begin(), rgt.end());
  bool ret = true;
  if (!lft.empty()) {
    ch[cur][0] = ++V;
    ret &= dfs(ch[cur][0], lft.back());
  }
  if (!rgt.empty() && V >= rgt.front()) return false;
  if (!rgt.empty()) upr = max(upr, rgt.back());
  if (V < upr) {
    ch[cur][1] = ++V;
    ret &= dfs(ch[cur][1], upr);
  }
  return ret;
}
bool go() {
  cin >> N >> C;
  for (int i = 0; i < C; ++i) {
    int a, b;
    string s;
    cin >> a >> b >> s;
    if (b <= a) return false;
    sub[a][s == "RIGHT"].push_back(b);
  }
  return dfs(V, N);
}
void print(int cur) {
  if (ch[cur][0]) print(ch[cur][0]);
  cout << cur << ' ';
  if (ch[cur][1]) print(ch[cur][1]);
}
int main() {
  ios_base::sync_with_stdio(0);
  if (!go()) {
    cout << "IMPOSSIBLE\n";
  } else {
    print(1);
  }
  return 0;
}
