#include <bits/stdc++.h>
using namespace std;
int fastMax(int x, int y) { return (((y - x) >> (32 - 1)) & (x ^ y)) ^ y; }
int fastMin(int x, int y) { return (((y - x) >> (32 - 1)) & (x ^ y)) ^ x; }
const long long int MAXN = 602;
bool fdp[MAXN][MAXN], dp[MAXN][MAXN];
long long int l[MAXN], r[MAXN];
string second;
bool rec(long long int i, long long int j) {
  if (i > j) return 1;
  if (i == j) return l[i] == 1;
  if (fdp[i][j]) return dp[i][j];
  fdp[i][j] = true;
  for (long long int k = l[i]; k <= r[i] && k <= (j - i) * 2 + 1; k++) {
    if (k % 2 == 1) {
      long long int in = (k - 1) / 2;
      dp[i][j] |= (rec(i + 1, i + in) & rec(i + in + 1, j));
    }
  }
  return dp[i][j];
}
void rec_print(long long int id, long long int i, long long int j) {
  if (i > j) return;
  if (i == j) {
    second[id - 1] = '(';
    second[id] = ')';
    return;
  }
  second[id - 1] = '(';
  for (long long int k = l[i]; k <= r[i] && k <= (j - i) * 2 + 1; k++) {
    if (k % 2 == 1) {
      long long int in = (k - 1) / 2;
      if (rec(i + 1, i + in) & rec(i + in + 1, j)) {
        second[id + k - 1] = ')';
        rec_print(id + 1, i + 1, i + in);
        rec_print(id + k + 1, i + in + 1, j);
        return;
      }
    }
  }
}
void solve() {
  long long int n;
  cin >> n;
  for (int i = (1); i <= (n); ++i) {
    cin >> l[i] >> r[i];
    second += "**";
  }
  if (rec(1, n) == 0)
    cout << "IMPOSSIBLE\n";
  else
    rec_print(1, 1, n), cout << second << endl;
}
signed main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  ;
  long long int t, w;
  t = 1;
  for (int i = (1); i <= (t); ++i) {
    solve();
  }
}
