#include <bits/stdc++.h>
using namespace std;
void read() { return; }
void wrt() { cout << (string) "\n"; }
void wrt(long long t) { cout << t; }
void wrt(int t) { cout << t; }
void wrt(char t) { cout << t; }
void wrt(string t) { cout << t; }
void wrt(double t) { cout << t; }
template <class T>
void wrt(set<T> v);
template <class T>
void wrt(vector<T> v);
template <class T>
void wrt(multiset<T> v);
template <class T, class V>
void wrt(map<T, V> v);
template <class T, class V>
void wrt(pair<T, V> p);
template <size_t T>
void wrt(const char (&a)[T]) {
  string s = a;
  wrt(s);
  wrt();
}
template <class T>
void wrt(set<T> v) {
  for (T i : v) {
    wrt(i);
    wrt(' ');
  }
  wrt();
}
template <class T>
void wrt(vector<T> v) {
  for (T i : v) {
    wrt(i);
    wrt(' ');
  }
  wrt();
}
template <class T>
void wrt(multiset<T> v) {
  for (T i : v) {
    wrt(i);
    wrt(' ');
  }
  wrt();
}
template <class T, class V>
void wrt(map<T, V> v) {
  for (auto i : v) {
    wrt(i);
    wrt(' ');
  }
  wrt();
}
template <class T, class V>
void wrt(pair<T, V> p) {
  wrt(p.first);
  wrt(' ');
  wrt(p.second);
  wrt();
}
template <class T, class... V>
void wrt(T x, V... args) {
  (wrt(x), wrt(' '), wrt(args...));
}
template <class T, class... V>
void read(T &x, V &...args) {
  ((cin >> x), read(args...));
}
template <class T>
void readArr(T &arr, int x, int y) {
  for (int i = (int)x; i < (int)y; ++i) cin >> arr[i];
}
const int N = 1e6;
const int INF = INT_MAX;
const int MOD = 1e9 + 7;
long long gcd(long long a, long long b) {
  return (b == 0) ? (a) : (gcd(b, a %= b));
}
long long lcm(long long a, long long b) { return (a * b) / gcd(a, b); }
long long _sum(vector<int> a) { return accumulate(a.begin(), a.end(), 0ll); }
long long _add(long long x, long long y) {
  x %= MOD, y %= MOD;
  return (x + y) % MOD;
}
long long _sub(long long x, long long y) {
  x %= MOD, y %= MOD;
  return (x - y + MOD) % MOD;
}
long long _mul(long long x, long long y) {
  x %= MOD, y %= MOD;
  return (x * 1ll * y) % MOD;
}
long long _pow(long long x, long long y) {
  if (y == 0)
    return 1;
  else if (y % 2 == 0) {
    long long _tmp = _pow(x, y / 2);
    return _mul(_tmp, _tmp);
  } else
    return _mul(x, _pow(x, y - 1));
}
long long _inv(long long p) { return _pow(p, MOD - 2); }
long long _div(long long x, long long y) {
  x %= MOD, y %= MOD;
  return _mul(x, _inv(y));
}
long long _nCr(long long n, long long r, vector<long long> &fact) {
  return _mul(fact[n], _inv(_mul(fact[r], fact[n - r])));
}
void solveTestCase() {
  long long n, k;
  read(n, k);
  long long mx = n * (n - 1) / 2;
  if (mx < k) {
    wrt("Impossible");
    return;
  }
  string ans = "(";
  long long close = n, open = 1;
  ;
  while (close) {
    if (k >= open) {
      ans += '(';
      k -= open;
      open++;
    } else {
      ans += ')';
      close--;
      open--;
    }
  }
  wrt(ans);
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0), cout.tie(0);
  ;
  int t = 1;
  while (t--) solveTestCase();
  return 0;
}
