#include <bits/stdc++.h>
using namespace std;
inline int max(int a, int b) { return a < b ? b : a; }
inline int min(int a, int b) { return a > b ? b : a; }
inline long long max(long long a, long long b) { return a < b ? b : a; }
inline long long min(long long a, long long b) { return a > b ? b : a; }
const int mod = 1e9 + 7;
const int N = 1e6 + 10;
const long long INF = 1e18;
pair<int, int> G[N][2];
char s[10];
int u[N];
void ex() {
  printf("IMPOSSIBLE\n");
  exit(0);
}
vector<int> ans;
int dfs(int v, int m) {
  u[v] = 1;
  if (m < v) ex();
  int nx = v + 1;
  if (G[v][0].first != mod) {
    if (u[v + 1]) ex();
    nx = dfs(v + 1, G[v][0].second);
  }
  ans.push_back(v);
  if (G[v][1].first != mod) {
    if (G[v][1].first < nx) ex();
    nx = dfs(nx, max(m, G[v][1].second));
  } else {
    if (m >= nx) {
      nx = dfs(nx, m);
    }
  }
  return nx;
}
int main() {
  int n, m;
  scanf("%d%d", &n, &m);
  for (int i = 0; i < n; ++i)
    G[i][0] = make_pair(mod, -1), G[i][1] = make_pair(mod, -1);
  for (int i = 0; i < m; ++i) {
    int x, y;
    scanf("%d%d%s", &x, &y, s);
    x--;
    y--;
    if (y <= x) {
      printf("IMPOSSIBLE\n");
      exit(0);
    }
    if (s[0] == 'L')
      G[x][0].first = min(G[x][0].first, y),
      G[x][0].second = max(G[x][0].second, y);
    else
      G[x][1].first = min(G[x][1].first, y),
      G[x][1].second = max(G[x][1].second, y);
  }
  dfs(0, n - 1);
  assert(ans.size() == n);
  for (int i = 0; i < n; ++i) printf("%d ", ans[i] + 1);
  printf("\n");
  return 0;
}
