#include <bits/stdc++.h>
using namespace std;
void testGen() {
  freopen("biginput1.txt", "w", stdout);
  fclose(stdout);
}
int n, c;
int minL[1000100], minR[1000100], maxL[1000100], maxR[1000100];
int ret[1000100];
int cntRet = 0;
int cur = 0;
bool dfs(int u, int m) {
  cur++;
  assert(cur == u);
  if (minL[u] != 0) {
    if (!dfs(cur + 1, maxL[u])) {
      return false;
    }
  }
  ret[cntRet] = u;
  cntRet++;
  if (minR[u] != 0 && cur > minR[u]) {
    return false;
  }
  int t = max(maxR[u], m);
  if (t >= cur + 1) {
    if (!dfs(cur + 1, t)) {
      return false;
    }
  }
  return true;
}
int main() {
  cin >> n >> c;
  int a, b;
  string s;
  for (auto repeat_var = 0; repeat_var < c; ++repeat_var) {
    cin >> a >> b >> s;
    if (a >= b) {
      cout << "IMPOSSIBLE";
      return 0;
    }
    if (s[0] == 'L') {
      if (minL[a] == 0) {
        minL[a] = b;
        maxL[a] = b;
      } else {
        minL[a] = min(minL[a], b);
        maxL[a] = max(maxL[a], b);
      }
    } else {
      if (minR[a] == 0) {
        minR[a] = b;
        maxR[a] = b;
      } else {
        minR[a] = min(minR[a], b);
        maxR[a] = max(maxR[a], b);
      }
    }
  }
  for (int i = 1; i <= n; ++i) {
    if (maxL[i] != 0 && minR[i] != 0 && maxL[i] >= minR[i]) {
      cout << "IMPOSSIBLE";
      return 0;
    }
  }
  if (!dfs(1, n)) {
    cout << "IMPOSSIBLE";
  } else {
    for (int i = 0; i < n; ++i) {
      cout << ret[i] << " ";
    }
  }
  return 0;
}
