#include <bits/stdc++.h>
using namespace std;
int n, nc, a[111], b[111];
string c[111];
struct Node {
  int lab;
  Node *left, *right;
  Node(int x) {
    lab = x;
    left = NULL;
    right = NULL;
  }
};
void printfalse() {
  cout << "IMPOSSIBLE";
  exit(0);
}
Node *solve(int x, int y) {
  if (x > y) return NULL;
  if (x == y) return new Node(x);
  int l = -1, r = n + 1;
  for (int i = (1); i <= (nc); i++) {
    int u = a[i], v = b[i];
    if (u == x) {
      if (c[i][0] == 'L') {
        l = max(l, v);
      } else {
        r = min(r, v);
      }
    }
  }
  for (int s = (max(x, l)); s <= (min(y, r - 1)); s++) {
    bool ok = true;
    for (int i = (1); i <= (nc); i++) {
      int u = a[i], v = b[i];
      if (x < min(u, v) && min(u, v) <= s && s < max(u, v)) {
        ok = false;
      }
    }
    if (!ok) continue;
    Node *r = new Node(x);
    r->left = solve(x + 1, s);
    r->right = solve(s + 1, y);
    return r;
  }
  printfalse();
}
void print(Node *r) {
  if (r == NULL) return;
  print(r->left);
  cout << r->lab << " ";
  print(r->right);
}
bool find(Node *u, int v) {
  if (u == NULL) return false;
  if (u->lab == v) return true;
  return find(u->left, v) || find(u->right, v);
}
void visit(Node *u) {
  if (u == NULL) return;
  for (int i = (1); i <= (nc); i++)
    if (a[i] == u->lab) {
      if (c[i][0] == 'L') {
        if (!find(u->left, b[i])) printfalse();
      } else {
        if (!find(u->right, b[i])) printfalse();
      }
    }
  visit(u->left);
  visit(u->right);
}
int main() {
  cin >> n >> nc;
  for (int i = (1); i <= (nc); i++) {
    cin >> a[i] >> b[i] >> c[i];
  }
  Node *r = solve(1, n);
  visit(r);
  print(r);
}
