#include <bits/stdc++.h>
using namespace std;
map<int, int> _min[2], _max[2];
vector<int> ret;
int possible(int fst, int lst) {
  if (_min[1].count(fst) && fst >= _min[1][fst]) return -1;
  if (!(_min[0].count(fst))) {
    ret.push_back(fst);
    if (fst == lst && !(_max[1].count(fst))) return fst;
    return possible(fst + 1, max(lst, _max[1][fst]));
  }
  if (_min[0][fst] <= fst) return -1;
  int mid = possible(fst + 1, _max[0][fst]);
  ret.push_back(fst);
  if (mid == -1 || (_min[1].count(fst) && mid + 1 > _min[1][fst])) return -1;
  if (mid >= lst && !(_min[1].count(fst))) return mid;
  lst = max(lst, mid + 1);
  return possible(mid + 1, max(lst, _max[1][fst]));
}
int main(void) {
  int n, c;
  int a, b;
  string side;
  cin >> n >> c;
  for (int i = 0; i < c; i++) {
    cin >> a >> b >> side;
    if (side == "LEFT") {
      if (!_min[0].count(a)) {
        _min[0][a] = b;
        _max[0][a] = b;
      }
      _min[0][a] = min(_min[0][a], b);
      _max[0][a] = max(_max[0][a], b);
    } else {
      if (!_min[1].count(a)) {
        _min[1][a] = b;
        _max[1][a] = b;
      }
      _min[1][a] = min(_min[1][a], b);
      _max[1][a] = max(_max[1][a], b);
    }
  }
  if (possible(1, n) == n)
    for (int i = 0; i < n; i++) {
      if (i) cout << " ";
      cout << ret[i];
    }
  else
    cout << "IMPOSSIBLE";
  cout << endl;
  return 0;
}
