#include <bits/stdc++.h>
using namespace std;
template <typename Arg1>
void __f(const char* name, Arg1&& arg1) {
  cerr << name << " : " << arg1 << '\n';
}
template <typename Arg1, typename... Args>
void __f(const char* names, Arg1&& arg1, Args&&... args) {
  const char* comma = strchr(names + 1, ',');
  cerr.write(names, comma - names) << " : " << arg1 << " | ";
  __f(comma + 1, args...);
}
template <typename T>
using minpq = priority_queue<T, vector<T>, greater<T>>;
template <typename T>
using maxpq = priority_queue<T>;
inline long long CC(long long n, long long y) {
  return (((n) + (y - 1) - 1) / (y - 1)) - (((n) + (y)-1) / (y));
}
inline long long FF(long long n, long long y) { return n / y - n / (y + 1); }
inline int add(int a, int b, int p = 1000000007) {
  int c = a + b;
  if (c >= p) c -= p;
  return c;
}
inline int sub(int a, int b, int p = 1000000007) {
  int c = a - b;
  if (c < 0) c += p;
  return c;
}
inline int mul(int a, int b, int p = 1000000007) { return (a * 1ll * b) % p; }
int n;
bool dp[605][605];
int tr[605][605];
int L[605], R[605];
int rec(int i, int l) {
  int j = l;
  if (l == 0) return 1;
  auto& ans = dp[i][j];
  int& trc = tr[i][j];
  if (trc != -1) return ans;
  trc = 0;
  ans = 0;
  for (int x = max(L[i], 1); x <= min(R[i], 2 * l - 1); x += 2) {
    int kk = (x - 1) / 2;
    ans |= rec(i + 1, kk) & rec(i + kk + 1, l - kk - 1);
    if (ans) {
      tr[i][j] = x;
      break;
    }
  }
  42;
  return ans;
}
char ans[605];
void print(int i, int j, int cur) {
  42;
  if (j == 0) return;
  int x = tr[i][j];
  ans[cur] = '(';
  ans[cur + x] = ')';
  int kk = (x - 1) / 2;
  print(i + 1, kk, cur + 1);
  print(i + kk + 1, j - kk - 1, cur + x + 1);
}
int32_t main() {
  ios_base::sync_with_stdio(false), cin.tie(NULL);
  clock_t clk = clock();
  cerr << "I will return...\n";
  cin >> n;
  for (int i = (0); i < (n); i++) {
    cin >> L[i] >> R[i];
    if (L[i] % 2 == 0) L[i]++;
    if (R[i] % 2 == 0) R[i]--;
    if (L[i] > R[i]) {
      cout << "IMPOSSIBLE\n";
      return 0;
    }
  }
  memset(tr, -1, sizeof tr);
  if (!rec(0, n)) {
    cout << "IMPOSSIBLE\n";
    return 0;
  }
  print(0, n, 0);
  for (int i = (0); i < (2 * n); i++) cout << ans[i];
  cout << '\n';
  cerr << "...don't you ever hang your head.\n";
  cerr << "Time (in ms): " << double(clock() - clk) * 1000.0 / CLOCKS_PER_SEC
       << '\n';
}
