#include <bits/stdc++.h>
using namespace std;
const int N = 600 + 5;
bool mark[N][N], ans[N][N];
int l[N], r[N], n, par[N][N];
const string NO = "IMPOSSIBLE";
string s = "";
bool pos(int b, int e) {
  if (mark[b][e]) return ans[b][e];
  mark[b][e] = 1;
  if (e == b + 1) {
    if (l[b] == 1) {
      ans[b][e] = 1;
      par[b][e] = 0;
      return "()";
    }
    return 0;
  }
  if (l[b] % 2 == 0) l[b]++;
  for (int i = l[b]; i <= r[b] && b + i / 2 + 1 <= e; i += 2) {
    if (i / 2 == (e - 1) - b) {
      pos(b + 1, e);
      if (ans[b + 1][e]) {
        ans[b][e] = 1;
        par[b][e] = -1;
        return 1;
      } else
        return 0;
    }
    if (i / 2 > (e - 1) - b) break;
    bool x = pos(b, b + i / 2 + 1);
    bool y = pos(b + i / 2 + 1, e);
    if (x && y) {
      ans[b][e] = 1;
      par[b][e] = i / 2;
      return 1;
    }
  }
  return 0;
}
string pp(int b, int e) {
  if (b == e - 1) return "()";
  if (par[b][e] == -1) {
    string t = "(" + pp(b + 1, e) + ")";
    return t;
  }
  string t1 = pp(b, b + par[b][e] + 1);
  string t2 = pp(b + par[b][e] + 1, e);
  return t1 + t2;
}
int main() {
  cin >> n;
  for (int i = 0; i < n; i++) scanf("%d %d", &l[i], &r[i]);
  if (pos(0, n))
    cout << pp(0, n) << endl;
  else
    cout << NO << endl;
}
