#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:256000000")
using namespace std;
int solve();
int main() { solve(); }
const int inf = (int)1e9 + 7;
const int dd = (int)2e6 + 7;
int cnt[2 * dd], P[dd], S[dd], B[dd], n;
string s;
int mod, mod2, p = 3;
int P1[dd], H[dd];
int P2[dd], H2[dd];
struct MyHash {
  string S;
  MyHash(string s, int t, int t2) {
    S = s;
    mod = t, mod2 = t;
    P1[0] = P2[0] = 1;
    for (int i = 0; i < (int)s.size(); i++) P1[i + 1] = 1ll * P1[i] * p % mod;
    for (int i = 0; i < (int)s.size(); i++) P2[i + 1] = 1ll * P2[i] * p % mod2;
    for (int i = 0; i < (int)s.size(); i++)
      H[i + 1] = (1ll * H[i] * p + get(s[i])) % mod;
    for (int i = 0; i < (int)s.size(); i++)
      H2[i + 1] = (1ll * H2[i] * p + get(s[i])) % mod2;
  }
  int get(char c) { return c == '(' ? 1 : 2; }
  int get(int l, int len) {
    return (H[l + len] + mod - 1ll * H[l] * P1[len] % mod) % mod;
  }
  int get2(int l, int len) {
    return (H2[l + len] + mod - 1ll * H2[l] * P2[len] % mod) % mod;
  }
  int check(int i, int j) {
    int l = 0, r = n;
    while (r - l > 1) {
      int m = (l + r) / 2;
      if (get(i, m) == get(j, m) && get2(i, m) == get2(j, m))
        l = m;
      else
        r = m;
    }
    return S[i + l] < S[j + l];
  }
};
int solve() {
  cin >> s;
  n = (int)s.size();
  if (s.find(")") == -1 || s.find("(") == -1) {
    cout << string(n, '(') + string(n, ')');
    return 0;
  }
  s += s;
  MyHash JJ(s, 1e8 + 13, 1e9 + 7);
  n <<= 1;
  for (int i = n - 1; i >= 0; i--) {
    if (s[i] == ')')
      cnt[i] = 0;
    else
      cnt[i] = cnt[i + 1] + 1;
  }
  n >>= 1;
  int pos = -1, c = -1, len = inf, Q;
  for (int i = 0; i < n; i++) {
    B[i + 1] = B[i] + (s[i] == '(' ? 1 : -1);
    P[i + 1] = min(P[i], B[i + 1]);
  }
  S[n] = B[n];
  for (int i = n - 1; i >= 0; i--) {
    S[i] = min(S[i + 1], B[i + 1]);
  }
  for (int i = 0; i < n; i++) {
    if ((i ? s[i - 1] : s[n - 1]) == '(' || s[i] == ')') continue;
    int cur = B[n] - B[i];
    int q = min(S[i] - B[i], P[i] + cur);
    q = min(q, 0);
    q = -q;
    int curlen = q + B[n] + q;
    if (curlen == len ? (cnt[i] + q == c ? JJ.check(i, pos) : cnt[i] + q > c)
                      : curlen < len) {
      pos = i;
      c = cnt[i] + q;
      len = curlen;
      Q = q;
    }
  }
  string ans = "";
  for (int i = 0; i < Q; ++i) ans += '(';
  for (int i = pos; i < pos + n; ++i) ans += s[i];
  for (int i = 0; i < Q + B[n]; ++i) ans += ')';
  cout << ans;
  return 0;
}
