#include <bits/stdc++.h>
using namespace std;
char s[2000100];
int Lb[2000100 << 2], Rb[2000100 << 2];
void build(int x, int L, int R) {
  if (L == R) {
    if (s[L] == '(')
      Rb[x] = 1;
    else
      Lb[x] = 1;
    return;
  }
  int mid = L + R >> 1;
  build((x << 1), L, mid);
  build((x << 1 | 1), mid + 1, R);
  if (Rb[(x << 1)] > Lb[(x << 1 | 1)]) {
    Lb[x] = Lb[(x << 1)];
    Rb[x] = Rb[(x << 1 | 1)] + Rb[(x << 1)] - Lb[(x << 1 | 1)];
  } else {
    Lb[x] = Lb[(x << 1)] + Lb[(x << 1 | 1)] - Rb[(x << 1)];
    Rb[x] = Rb[(x << 1 | 1)];
  }
}
int lb, rb;
int qury(int x, int L, int R, int l, int r) {
  if (l <= L && R <= r) {
    lb = lb + max(0, Lb[x] - rb);
    rb = Rb[x] + max(0, rb - Lb[x]);
    return lb;
  }
  int mid = L + R >> 1, res;
  if (l <= mid) res = qury((x << 1), L, mid, l, r);
  if (r > mid) res = qury((x << 1 | 1), mid + 1, R, l, r);
  return res;
}
long long sum1[2000100], sum2[2000100];
long long fox1[2000100], fox2[2000100];
long long f_abs(long long a) {
  return (a % 1000000009 + 1000000009) % 1000000009;
}
int main() {
  scanf("%s", s);
  int zer = 0, one = 0, len = strlen(s), _len = len;
  int su1 = 0, su2 = 0;
  for (int i = 0; i < _len; i++)
    if (s[i] == '(')
      su1++;
    else
      su2++;
  for (int i = 0; i < _len - 1; i++) s[len++] = s[i];
  s[len] = 0;
  fox1[0] = 1;
  fox2[0] = 1;
  for (int i = 0; i < len; i++) {
    sum1[i + 1] = sum1[i] * 17 + (s[i] == '(' ? 14 : 29741);
    sum1[i + 1] %= 1000000009;
    fox1[i + 1] = fox1[i] * 17;
    fox1[i + 1] %= 1000000009;
    sum2[i + 1] = sum2[i] * 1031 + (s[i] == '(' ? 13 : 247);
    sum2[i + 1] %= 1000000009;
    fox2[i + 1] = fox2[i] * 1031;
    fox2[i + 1] %= 1000000009;
  }
  build(1, 0, len - 1);
  int ans = 20000000, bj;
  for (int i = 0; i < _len; i++) {
    lb = rb = 0;
    int a = qury(1, 0, len - 1, i, i + _len - 1);
    if (a < ans) {
      ans = a;
      bj = i;
    } else if (a == ans) {
      int l = 0, r = _len, mid, as;
      while (l <= r) {
        mid = l + r >> 1;
        if (f_abs(sum1[bj + mid] - sum1[bj] * fox1[mid]) ==
            f_abs(sum1[i + mid] - sum1[i] * fox1[mid])) {
          if (f_abs(sum2[bj + mid] - sum2[bj] * fox2[mid]) ==
              f_abs(sum2[i + mid] - sum2[i] * fox2[mid])) {
            as = mid;
            l = mid + 1;
          } else
            r = mid - 1;
        } else
          r = mid - 1;
      }
      if (as == _len || s[bj + as] < s[i + as]) continue;
      bj = i;
    }
  }
  string f_ans = "";
  for (int i = 0; i < ans; i++) f_ans += '(';
  for (int i = bj; i < _len; i++) f_ans += s[i];
  for (int i = 0; i < bj; i++) f_ans += s[i];
  int lef = su1 + ans - su2;
  for (int i = 0; i < lef; i++) f_ans += ')';
  cout << f_ans << endl;
  return 0;
}
