#include <bits/stdc++.h>
using namespace std;
const long long mod = 1000000007;
const int mxN = 610;
const int mxSZ = mxN << 1;
int N;
bitset<mxSZ> dp[mxN];
bitset<mxSZ> vis[mxN];
int l[mxN], r[mxN];
bool bt(int ind, int sz) {
  if (ind >= N || sz == 0) {
    return true;
  }
  if (vis[ind][sz]) return dp[ind][sz];
  vis[ind][sz] = true;
  for (int i = l[ind] | 1; i <= r[ind] && !dp[ind][sz]; i += 2) {
    if (i + 1 > sz) break;
    dp[ind][sz] = bt(ind + 1, i - 1) && bt(ind + ((i + 1) >> 1), sz - i - 1);
  }
  return dp[ind][sz];
}
string s;
void build(int ind, int si, int sz) {
  if (ind >= N || sz == 0) return;
  for (int i = l[ind] | 1; i <= r[ind]; i += 2) {
    assert(i + 1 <= sz);
    if (bt(ind + 1, i - 1) && bt(ind + ((i + 1) >> 1), sz - i - 1)) {
      s[si] = '(';
      s[si + i] = ')';
      build(ind + 1, si + 1, i - 1);
      build(ind + ((i + 1) >> 1), si + i + 1, sz - i - 1);
      break;
    }
  }
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(nullptr);
  cin >> N;
  cerr << s << '\n';
  for (int i = 0; i < N; i++) {
    cin >> l[i] >> r[i];
  }
  if (!bt(0, N << 1)) {
    cout << "IMPOSSIBLE\n";
    return 0;
  }
  s = string(N << 1, '(');
  build(0, 0, N << 1);
  cout << s << '\n';
  return 0;
}
