#include <bits/stdc++.h>
using namespace std;
const int MOD(1000000007);
const int INF((1 << 30) - 1);
const int MAXN(605);
int a[MAXN], b[MAXN], dp[MAXN][MAXN], ans[MAXN], c[2 * MAXN];
bool DP(int l, int r) {
  if (l == r) return dp[l][r] = (a[l] == 1);
  if (dp[l][r] != -1) return dp[l][r];
  int &ret = dp[l][r] = 0;
  for (int i = a[l]; i <= b[l]; i++) {
    if (i % 2 == 0) continue;
    int num = (i - 1) / 2;
    if (num > r - l) break;
    if (num == 0 || num == r - l)
      ret |= DP(l + 1, r);
    else
      ret |= (DP(l + 1, l + num) && DP(l + num + 1, r));
  }
  return ret;
}
void PR(int l, int r) {
  if (l == r) {
    ans[l] = 1;
    return;
  }
  for (int i = a[l]; i <= b[l]; i++) {
    if (i % 2 == 0) continue;
    int num = (i - 1) / 2;
    if (num > r - l) break;
    if (num == 0 || num == r - l) {
      if (dp[l + 1][r] == 1) {
        ans[l] = i;
        PR(l + 1, r);
        return;
      }
    } else {
      if (dp[l + 1][l + num] && dp[l + num + 1][r]) {
        ans[l] = i;
        PR(l + 1, l + num);
        PR(l + num + 1, r);
        return;
      }
    }
  }
}
int main() {
  int n;
  scanf("%d", &n);
  for (int i = 0; i < n; i++) scanf("%d%d", &a[i], &b[i]);
  memset(dp, -1, sizeof(dp));
  if (DP(0, n - 1)) {
    PR(0, n - 1);
    for (int i = 0; i < n; i++)
      for (int j = 0; j < 2 * n; j++) {
        if (c[j] == 0) {
          c[j] = +1;
          c[j + ans[i]] = -1;
          break;
        }
      }
    for (int j = 0; j < 2 * n; j++) {
      if (c[j] > 0)
        printf("(");
      else
        printf(")");
    }
  } else {
    printf("IMPOSSIBLE");
  }
}
