#include <bits/stdc++.h>
using namespace std;
template <typename T>
inline void mx(T& x, const T& y) {
  if (x < y) x = y;
}
template <typename T>
inline void mn(T& x, const T& y) {
  if (y < x) x = y;
}
const string IMPOSSIBLE = "IMPOSSIBLE";
const int N = 100;
struct State {
  bool can;
  int l, r;
  State() : can(false), l(0), r(0) {}
};
State dp[N][N + 1];
vector<int> l[N];
vector<int> r[N];
void solve(int a, int w) {
  int minW = 0;
  int maxW = w - 1;
  for (int b : l[a]) {
    mx(minW, b - a);
    if (b >= a + w) return;
  }
  for (int b : r[a]) {
    mn(maxW, b - a - 1);
    if (b >= a + w) return;
  }
  for (int l = minW; l <= maxW; ++l) {
    int r = w - 1 - l;
    if ((l == 0 || dp[a + 1][l].can) && (r == 0 || dp[a + 1 + l][r].can)) {
      dp[a][w].can = true;
      dp[a][w].l = l;
      dp[a][w].r = r;
      break;
    }
  }
}
void print(int a, int w) {
  if (dp[a][w].l > 0) {
    print(a + 1, dp[a][w].l);
  }
  cout << a + 1 << ' ';
  if (dp[a][w].r > 0) {
    print(a + 1 + dp[a][w].l, dp[a][w].r);
  }
}
int main() {
  ios_base::sync_with_stdio(false);
  int n, c;
  cin >> n >> c;
  string str;
  for (int i = 0; i < (c); ++i) {
    int a, b;
    cin >> a >> b >> str;
    --a, --b;
    if (a >= b) {
      cout << IMPOSSIBLE << endl;
      return 0;
    }
    if (str == "LEFT") {
      l[a].push_back(b);
    } else {
      r[a].push_back(b);
    }
  }
  for (int a = 0; a < (n); ++a) {
    if (l[a].size() == 1) l[a].push_back(l[a][0]);
    if (r[a].size() == 1) r[a].push_back(r[a][0]);
    sort(l[a].begin(), l[a].end());
    sort(r[a].begin(), r[a].end());
    if (l[a].size() > 2) l[a].erase(l[a].begin() + 1, l[a].end() - 1);
    if (r[a].size() > 2) r[a].erase(r[a].begin() + 1, r[a].end() - 1);
  }
  for (int w = 1; w <= n; ++w) {
    for (int i = 0; i + w <= n; ++i) {
      solve(i, w);
    }
  }
  if (!dp[0][n].can) {
    cout << IMPOSSIBLE << endl;
    return 0;
  }
  print(0, n);
  cout << endl;
  return 0;
}
