#include <bits/stdc++.h>
using namespace std;
const int int_inf = 0x3f3f3f3f;
const long long ll_inf = 0x3f3f3f3f3f3f3f3fll;
const double pi = acos(-1.0);
const double eps = 1e-8;
template <class T>
inline T abs(const T first) {
  return first < 0 ? -first : first;
}
template <class T>
inline void get_min(T &a, T b) {
  if (a > b) a = b;
}
template <class T>
inline void get_max(T &a, T b) {
  if (a < b) a = b;
}
template <class T>
inline void fix(T &a, T mo) {
  while (a >= mo) a -= mo;
  while (a < 0) a += mo;
}
template <class T>
inline void inc(T &a, T b, T mo) {
  a += b;
  fix(a, mo);
}
template <class T>
inline void dec(T &a, T b, T mo) {
  a -= b;
  fix(a, mo);
}
template <class T>
inline T mul_mod(T a, T b, T mo) {
  T ans = 0;
  for (; b; b >>= 1) {
    if (b & 1) inc(ans, a, mo);
    inc(a, a, mo);
  }
  return ans;
}
template <class T>
inline T pow_mod(T a, T b, T mo) {
  T ans = 1;
  for (; b; b >>= 1) {
    if (b & 1) ans = (long long)ans * a % mo;
    a = (long long)a * a % mo;
  }
  return ans;
}
template <class T>
inline T big_pow_mod(T a, T b, T mo) {
  T ans = 1;
  for (; b; b >>= 1) {
    if (b & 1) ans = mul_mod(ans, a, mo);
    a = mul_mod(a, a, mo);
  }
  return ans;
}
template <class T>
inline T pow(T a, int b) {
  T ans = 1;
  for (; b; b >>= 1) {
    if (b & 1) ans *= a;
    a *= a;
  }
  return ans;
}
template <class T>
inline T sqr(T first) {
  return first * first;
}
template <class T>
inline int sgn(T first) {
  if (first > eps) return 1;
  if (first < -eps) return -1;
  return 0;
}
template <class T>
inline void read_int(T &first) {
  first = 0;
  char ch;
  bool flag = 0;
  while (ch = getchar(), !isdigit(ch) && ch != '-')
    ;
  if (ch == '-')
    flag = 1;
  else
    first = ch - '0';
  while (ch = getchar(), isdigit(ch))
    first = (first << 3) + first + first + ch - '0';
  if (flag) first = -first;
}
template <class T>
inline void read_float(T &first) {
  first = 0;
  long double now_pos = 0.1;
  char ch;
  while (ch = getchar(), !isdigit(ch) && ch != '-')
    ;
  bool flag = 0, decimal = 0;
  if (ch == '-')
    flag = 1;
  else if (ch == '.')
    decimal = 1;
  while (ch = getchar(), isdigit(ch) || ch == '.') {
    if (ch == '.')
      decimal = 1;
    else if (decimal) {
      first += now_pos * (ch - '0');
      now_pos *= 0.1;
    } else
      first = first * 10 + ch - '0';
  }
  if (flag) first = -first;
}
int flag;
int cnt = 1;
vector<int> l[1000010], r[1000010];
int ls[1000010], rs[1000010];
inline void dfs(int now, int _max) {
  int now_max = now;
  for (int i = 0; i < ((int)((l[now]).size())); i++) {
    int first = l[now][i];
    if (first <= cnt) {
      flag = -1;
      return;
    }
    get_max(now_max, first);
  }
  if (now_max > now) {
    cnt++;
    ls[now] = cnt;
    dfs(cnt, now_max);
  }
  now_max = now;
  for (int i = 0; i < ((int)((r[now]).size())); i++) {
    int first = r[now][i];
    if (first <= cnt) {
      flag = -1;
      return;
    }
    get_max(now_max, first);
  }
  get_max(now_max, _max);
  if (now_max > cnt) {
    cnt++;
    rs[now] = cnt;
    dfs(cnt, now_max);
  }
}
inline void dfs(int now) {
  if (ls[now]) dfs(ls[now]);
  printf("%d ", now);
  if (rs[now]) dfs(rs[now]);
}
int main() {
  int n, c;
  read_int(n);
  read_int(c);
  for (int i = 1; i <= c; i++) {
    int first, second;
    char s[10];
    read_int(first);
    read_int(second);
    if (second <= first) flag = -1;
    scanf("%s", s);
    if (s[0] == 'L')
      l[first].push_back(second);
    else
      r[first].push_back(second);
  }
  if (flag == -1) {
    puts("IMPOSSIBLE");
    return 0;
  }
  dfs(1, n);
  if (flag == -1)
    puts("IMPOSSIBLE");
  else {
    dfs(1);
    puts("");
  }
  return 0;
}
