#include <bits/stdc++.h>
using namespace std;
int n, cc;
int s[100][3];
void init() {
  scanf("%d%d", &n, &cc);
  char tmp[10];
  bool flg = true;
  for (int i = 0; i < cc; i++) {
    scanf("%d%d%s", &s[i][0], &s[i][1], tmp);
    if (tmp[0] == 'L')
      s[i][2] = 0;
    else
      s[i][2] = 1;
    if (s[i][0] >= s[i][1]) flg = false;
  }
  if (!flg) {
    puts("IMPOSSIBLE");
    exit(0);
  }
}
int ans[105];
bool inside(int x, int l, int r) {
  if (l <= x && x <= r) return true;
  return false;
}
bool dfs(int root, int last, int offset) {
  if (root == last) {
    ans[offset] = root;
    return true;
  }
  bool flg = true;
  for (int i = 0; i < cc; i++) {
    if (!inside(s[i][0], root, last) && !inside(s[i][1], root, last)) {
      continue;
    } else if (!inside(s[i][0], root, last) && inside(s[i][1], root, last)) {
      continue;
    } else if (inside(s[i][0], root, last) && !inside(s[i][1], root, last)) {
      flg = false;
      break;
    } else if (inside(s[i][0], root, root) && inside(s[i][1], root + 1, last)) {
      if (s[i][2] == 1) {
        flg = false;
        break;
      } else
        continue;
    } else if (inside(s[i][1], root, root)) {
      flg = false;
      break;
    }
  }
  if (flg) {
    ans[offset + last - root] = root;
    if (dfs(root + 1, last, offset)) return true;
    return false;
  }
  flg = true;
  for (int i = 0; i < cc; i++) {
    if (!inside(s[i][0], root, last) && !inside(s[i][1], root, last)) {
      continue;
    } else if (!inside(s[i][0], root, last) && inside(s[i][1], root, last)) {
      continue;
    } else if (inside(s[i][0], root, last) && !inside(s[i][1], root, last)) {
      flg = false;
      break;
    } else if (inside(s[i][0], root, root) && inside(s[i][1], root + 1, last)) {
      if (s[i][2] == 0) {
        flg = false;
        break;
      } else
        continue;
    } else if (inside(s[i][1], root, root)) {
      flg = false;
      break;
    }
  }
  if (flg) {
    ans[offset] = root;
    if (dfs(root + 1, last, offset + 1)) return true;
    return false;
  }
  for (int par = root + 1; par < last; par++) {
    flg = true;
    for (int i = 0; i < cc; i++) {
      if (!inside(s[i][0], root, last) && !inside(s[i][1], root, last)) {
        continue;
      } else if (!inside(s[i][0], root, last) && inside(s[i][1], root, last)) {
        continue;
      } else if (inside(s[i][0], root, last) && !inside(s[i][1], root, last)) {
        flg = false;
        break;
      } else if (inside(s[i][0], root, root) &&
                 inside(s[i][1], root + 1, par)) {
        if (s[i][2] == 1) {
          flg = false;
          break;
        } else
          continue;
      } else if (inside(s[i][0], root, root) &&
                 inside(s[i][1], par + 1, last)) {
        if (s[i][2] == 0) {
          flg = false;
          break;
        } else
          continue;
      } else if (inside(s[i][0], root + 1, par) &&
                 inside(s[i][1], par + 1, last)) {
        flg = false;
        break;
      } else if (inside(s[i][1], root + 1, par) &&
                 inside(s[i][0], par + 1, last)) {
        flg = false;
        break;
      } else if (inside(s[i][1], root, root)) {
        flg = false;
        break;
      }
    }
    if (flg) {
      ans[offset + par - root] = root;
      if (dfs(root + 1, par, offset) &&
          dfs(par + 1, last, offset + par - root + 1))
        return true;
      return false;
    }
  }
  return false;
}
void process() {
  if (dfs(1, n, 0)) {
    for (int i = 0; i < n; i++) printf("%d ", ans[i]);
    puts("");
  } else {
    puts("IMPOSSIBLE");
  }
}
int main() {
  init();
  process();
  return 0;
}
