#include <bits/stdc++.h>
using namespace std;
const long long MOD = 1000000007LL;
const long long MAX = 100010LL;
template <class T>
T abs(T x) {
  return x > 0 ? x : -x;
}
template <typename T>
T gcd(T a, T b) {
  if (b == 0) return a;
  return gcd(b, a % b);
}
template <typename T>
T power(T x, T y, long long m = MOD) {
  T ans = 1;
  x %= m;
  while (y > 0) {
    if (y & 1LL) ans = (ans * x) % m;
    y >>= 1LL;
    x = (x * x) % m;
  }
  return ans % m;
}
pair<int, int> dist[601];
int dp[601][601], n;
bool valid(int i, int j) {
  if (dp[i][j] != -1) return dp[i][j];
  if (i > n || i > j) return 1;
  if (i == j) {
    if (dist[i].first <= 1 && dist[i].second >= 1) {
      return dp[i][j] = 1;
    } else {
      return dp[i][j] = 0;
    }
  } else {
    for (int x = dist[i].first; x <= min(dist[i].second, ((j - i) << 1) + 1);
         x++) {
      if (x & 1) {
        if (x == 1 || (x >> 1) == (j - i)) {
          if (valid(i + 1, j)) return dp[i][j] = 1;
        } else {
          if (valid(i + 1, i + (x >> 1)) && valid(i + 1 + (x >> 1), j)) {
            return dp[i][j] = 1;
          }
        }
      }
    }
    return dp[i][j] = 0;
  }
}
string ans = "";
void seq(int i, int j) {
  if (i == j) {
    ans += "()";
    return;
  }
  if (i > n || i > j) return;
  ans += '(';
  for (int x = dist[i].first; x <= min(dist[i].second, ((j - i) << 1) + 1);
       x++) {
    if (x & 1) {
      if (x == 1) {
        if (valid(i + 1, j)) {
          ans += ')';
          seq(i + 1, j);
          return;
        }
      } else if ((x >> 1) == (j - i)) {
        if (valid(i + 1, j)) {
          seq(i + 1, j);
          ans += ')';
          return;
        }
      } else {
        if (valid(i + 1, i + (x >> 1)) && valid(i + 1 + (x >> 1), j)) {
          seq(i + 1, i + (x >> 1));
          ans += ')';
          seq(i + 1 + (x >> 1), j);
          return;
        }
      }
    }
  }
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  cin >> n;
  for (int i(1); i <= (n); i++) {
    cin >> dist[i].first >> dist[i].second;
  }
  memset(dp, -1, sizeof(dp));
  if (valid(1, n)) {
    seq(1, n);
    cout << ans << '\n';
    return 0;
  }
  cout << "IMPOSSIBLE\n";
  return 0;
}
