#include <bits/stdc++.h>
using namespace std;
long long gcd(long long a, long long b) {
  long long r;
  while (b != 0) {
    r = a % b;
    a = b;
    b = r;
  }
  return a;
}
long long lcm(long long a, long long b) { return a / gcd(a, b) * b; }
long long fpow(long long n, long long k, int p = (int)1e9 + 7) {
  long long r = 1;
  for (; k; k >>= 1) {
    if (k & 1) r = r * n % p;
    n = n * n % p;
  }
  return r;
}
const int MOD = (int)1e9 + 7;
const int INF = (int)1e9;
const long long LINF = (long long)1e18;
const long double PI = 2 * acos((long double)0);
const int maxn = 1000010;
int n, c;
int lmin[maxn];
int lmax[maxn];
int rmin[maxn];
int rmax[maxn];
int cur;
vector<int> ans;
int go(int from, int to) {
  cur = from;
  if (lmax[from] >= 0) {
    if (!go(from + 1, lmax[from])) return 0;
  }
  ans.push_back(from);
  if (rmax[from] >= 0 && rmin[from] <= cur) return 0;
  if (rmax[from] >= 0 || cur < to) return go(cur + 1, max(to, rmax[from]));
  return 1;
}
void solve() {
  memset(lmin, 0x3f, sizeof(lmin));
  memset(lmax, -1, sizeof(lmax));
  memset(rmin, 0x3f, sizeof(rmin));
  memset(rmax, -1, sizeof(rmax));
  scanf("%d%d", &n, &c);
  for (int i = (0); i < (c); i++) {
    int u, v;
    char dir[10];
    scanf("%d%d%s", &u, &v, dir);
    u--;
    v--;
    if (u >= v) {
      printf("IMPOSSIBLE");
      return;
    }
    if (dir[0] == 'L') {
      lmin[u] = min(lmin[u], v);
      lmax[u] = max(lmax[u], v);
    } else {
      rmin[u] = min(rmin[u], v);
      rmax[u] = max(rmax[u], v);
    }
  }
  if (!go(0, n - 1))
    printf("IMPOSSIBLE");
  else {
    for (int i = (0); i < (int((ans).size())); i++) printf("%d ", ans[i] + 1);
  }
}
int main() {
  solve();
  return 0;
}
