#include <bits/stdc++.h>
using namespace std;
const int maxn = 700;
int l[maxn], r[maxn];
bool dp[maxn][maxn];
int res[maxn][maxn];
void reconstruct(int l, int r) {
  if (l > r) return;
  if (l == r) {
    printf("()");
    return;
  }
  printf("(");
  reconstruct(l + 1, l + res[l][r]);
  printf(")");
  reconstruct(l + res[l][r] + 1, r);
}
int main() {
  int n;
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) {
    scanf("%d %d", &l[i], &r[i]);
    if (l[i] == 1) {
      dp[i][i] = 1;
    }
    dp[i + 1][i] = 1;
  }
  for (int len = 2; len <= n; len++) {
    for (int i = 1; i + len - 1 <= n; i++) {
      int j = i + len - 1;
      dp[i][j] = 0;
      for (int sz = l[i]; sz <= r[i]; sz++) {
        if (sz & 1) {
          int k = (sz - 1) / 2;
          if (dp[i + 1][i + k] && dp[i + k + 1][j]) {
            res[i][j] = k;
            dp[i][j] = 1;
          }
        }
      }
    }
  }
  if (dp[1][n]) {
    reconstruct(1, n);
    puts("");
  } else
    puts("IMPOSSIBLE");
  return 0;
}
