func_code_string: #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);   }   