#include <bits/stdc++.h>
using namespace std;
template <class T>
inline void read(T &x) {
  char c;
  bool fu = 0;
  for (c = getchar(); c <= 32; c = getchar())
    ;
  if (c == '-') fu = 1, c = getchar();
  for (x = 0; c > 32; c = getchar()) x = x * 10 + c - '0';
  if (fu) x *= -1;
}
template <class T>
inline void read(T &x, T &y) {
  read(x);
  read(y);
}
template <class T>
inline void read(T &x, T &y, T &z) {
  read(x, y);
  read(z);
}
const int N = 2000010;
char ch[N];
deque<int> Q;
bool can[N];
int len, l, m = 127, s1, s2, u1[N], u2[N], *x = u1, *y = u2, t[N], sa[N],
            ans[N], s[N];
inline bool cmp(int *r, int a, int b, int l) {
  return r[a] == r[b] && r[a + l] == r[b + l];
}
int main() {
  gets(ch + 1);
  len = strlen(ch + 1);
  for (int _tmp = len, i = 1; i <= _tmp; ++i) ch[len + i] = ch[i];
  l = len << 1;
  ch[0] = ch[len];
  for (int _tmp = l, i = 1; i <= _tmp; ++i) ++t[x[i] = ch[i]];
  for (int _tmp = m, i = 1; i <= _tmp; ++i) t[i] += t[i - 1];
  for (int _tmp = 1, i = l; i >= _tmp; --i) sa[t[x[i]]--] = i;
  for (int j = 1, p = 0; j <= l && p != l; m = p, j *= 2, p = 0) {
    for (int _tmp = l, i = l - j + 1; i <= _tmp; ++i) y[++p] = i;
    for (int _tmp = l, i = 1; i <= _tmp; ++i)
      if (sa[i] > j) y[++p] = sa[i] - j;
    for (int _tmp = m, i = 0; i <= _tmp; ++i) t[i] = 0;
    for (int _tmp = l, i = 1; i <= _tmp; ++i) s[i] = x[y[i]];
    for (int _tmp = l, i = 1; i <= _tmp; ++i) ++t[s[i]];
    for (int _tmp = m, i = 1; i <= _tmp; ++i) t[i] += t[i - 1];
    for (int _tmp = 1, i = l; i >= _tmp; --i) sa[t[s[i]]--] = y[i];
    swap(x, y);
    x[sa[1]] = 1, p = 1;
    for (int _tmp = l, i = 2; i <= _tmp; ++i)
      x[sa[i]] = cmp(y, sa[i - 1], sa[i], j) ? p : ++p;
  }
  for (int _tmp = len, i = 1; i <= _tmp; ++i) ++(ch[i] == '(' ? s1 : s2);
  for (int _tmp = len, i = l; i >= _tmp; --i) {
    s[i] = s[i + 1] + (ch[i] == '(' ? 1 : -1);
    while (!Q.empty() && s[i] > s[Q.back()]) Q.pop_back();
    Q.push_back(i);
    can[i] = 0;
  }
  for (int _tmp = 1, i = len; i >= _tmp; --i) {
    s[i] = s[i + 1] + (ch[i] == '(' ? 1 : -1);
    can[i] = (max(s2 - s1, 0) + (s[i] - s[Q.front()]) >= 0);
    while (!Q.empty() && s[i] > s[Q.back()]) Q.pop_back();
    Q.push_back(i);
    while (!Q.empty() && Q.front() >= i + len) Q.pop_front();
  }
  int p = 1;
  for (int _tmp = l, i = 1; i <= _tmp; ++i)
    if (can[sa[i]]) {
      p = sa[i];
      break;
    }
  while (s1 < s2) ++s1, putchar('(');
  for (int _tmp = p + len - 1, i = p; i <= _tmp; ++i) putchar(ch[i]);
  while (s1 > s2) ++s2, putchar(')');
  return 0;
}
