#include <bits/stdc++.h>
using namespace std;
bool dp[601][601], vis[601][601];
int L[601], R[601], n;
bool solve(int l, int r) {
  if (l > r) return 1;
  if (vis[l][r]) return dp[l][r];
  vis[l][r] = 1;
  for (int pos = L[l]; pos <= R[l]; pos++) {
    if ((pos - 1 & 1)) continue;
    if ((r - l + 1) * 2 < pos) break;
    dp[l][r] =
        solve(l + 1, l + (pos - 1) / 2) & solve(l + (pos - 1) / 2 + 1, r);
    if (dp[l][r]) break;
  }
  return dp[l][r];
}
void recon(int l, int r) {
  if (l > r) return;
  for (int pos = L[l]; pos <= R[l]; pos++) {
    if ((pos - 1) & 1) continue;
    if ((r - l + 1) * 2 < pos) break;
    if (solve(l + 1, l + (pos - 1) / 2) && solve(l + (pos - 1) / 2 + 1, r)) {
      putchar('(');
      recon(l + 1, l + (pos - 1) / 2);
      putchar(')');
      recon(l + (pos - 1) / 2 + 1, r);
      return;
    }
  }
}
int main(int argc, char const *argv[]) {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) scanf("%d %d", &L[i], &R[i]);
  if (solve(1, n))
    recon(1, n);
  else
    puts("IMPOSSIBLE");
}
