#include <bits/stdc++.h>
using namespace std;
const int maxN = 600 + 10;
int n, p[maxN][maxN];
bool dp[maxN][maxN];
pair<int, int> a[maxN];
char s[2 * maxN];
bool f(int L, int R) {
  int len = (R - L + 1) * 2 - 1;
  int flag = 0;
  for (int k = L; k <= R && !flag; k++) {
    if (a[k].first > len || a[k].second < len) {
      flag++;
    }
    if (!flag && dp[k + 1][R]) {
      p[L][R] = k;
      return 1;
    }
    len -= 2;
  }
  if (!flag) return 1;
  for (int k = L; k < R; k++) {
    if (dp[k + 1][R] && dp[L][k]) {
      p[L][R] = -k;
      return 1;
    }
  }
  return 0;
}
void pp(int L, int R) {
  if (p[L][R] == 0) {
    for (int i = L; i <= R; i++) cout << '(';
    for (int i = L; i <= R; i++) cout << ')';
  } else if (p[L][R] > 0) {
    for (int i = L; i <= p[L][R]; i++) cout << '(';
    pp(p[L][R] + 1, R);
    for (int i = L; i <= p[L][R]; i++) cout << ')';
  } else {
    pp(L, -p[L][R]);
    pp(-p[L][R] + 1, R);
  }
}
int main() {
  cin >> n;
  for (int i = 1; i <= n; i++) cin >> a[i].first >> a[i].second;
  for (int i = 1; i <= n; i++) {
    for (int j = i; j >= 1; j--) {
      if (f(j, i)) {
        dp[j][i] = 1;
      }
    }
  }
  if (!dp[1][n])
    cout << "IMPOSSIBLE";
  else {
    pp(1, n);
  }
}
