#include <bits/stdc++.h>
int dx[4] = {0, -1, 0, 1};
int dy[4] = {1, 0, -1, 0};
using namespace std;
char s[2234567];
char ans[2234567 * 2];
int n;
long long hs[2234567], base[2234567];
void makehash() {
  hs[0] = 0;
  base[0] = 1;
  for (int i = 1; i <= int(n * 2); ++i)
    base[i] = base[i - 1] * 2 % 1000000007ll,
    hs[i] = (hs[i - 1] * 2 + (s[i] == '(' ? 0 : 1)) % 1000000007ll;
}
inline long long geths(int i, int len) {
  return (hs[i + len - 1] - hs[i - 1] * base[len] % 1000000007ll +
          1000000007ll) %
         1000000007ll;
}
inline int lp(int u, int v) {
  int l = 0, r = n;
  while (l < r) {
    int m = (l + r + 1) >> 1;
    if (geths(u, m) == geths(v, m))
      l = m;
    else
      r = m - 1;
  }
  return l;
}
inline bool cmp(const int &x, const int &y) {
  int l = lp(x, y);
  return s[x + l] < s[y + l];
}
int a[2234567];
int Main() {
  ios_base::sync_with_stdio(0);
  scanf("%s", s + 1);
  n = strlen(s + 1);
  int cnt = 0;
  for (int i = 1; i <= int(n); ++i) {
    if (s[i] == '(')
      cnt++;
    else
      cnt--;
    s[i + n] = s[i];
  }
  int need = cnt >= 0 ? 0 : -cnt;
  makehash();
  set<pair<int, int> > st;
  int now = 0;
  int pre = 0;
  int can = 0;
  for (int i = 1; i <= int(n * 2 - 1); ++i) {
    if (s[i] == '(')
      now++;
    else
      now--;
    a[i] = now;
    st.insert({a[i], i});
    if (i > n) {
      if (s[i - n] == '(')
        pre++;
      else
        pre--;
      st.erase({a[i - n], i - n});
    }
    if (i >= n && st.begin()->first - pre + need >= 0) {
      if (can == 0 || cmp(i - n + 1, can)) can = i - n + 1;
    }
  }
  int u = 0;
  if (cnt > 0) {
    for (int i = 0; i < int(n); ++i) ans[u++] = s[can + i];
    for (int i = 0; i < int(cnt); ++i) ans[u++] = ')';
  } else {
    for (int i = 0; i < int(-cnt); ++i) ans[u++] = '(';
    for (int i = 0; i < int(n); ++i) ans[u++] = s[can + i];
  }
  ans[u] = '\0';
  puts(ans);
  return 0;
}
int main() { return Main(); }
