#include <bits/stdc++.h>
using namespace std;
bool debug = 1;
int n, m, k;
int dx[4] = {0, 1, 0, -1}, dy[4] = {1, 0, -1, 0};
long long ln, lk, lm;
clock_t start = clock();
double runt() { return ((double)(clock() - start)) / CLOCKS_PER_SEC; }
char s[2000015];
int A, B;
struct SuffixArray {
  int sa[2000015];
  int c[2000015], x[2000015], y[2000015];
  void get_SA(const char *s, int n, int m) {
    for (int(i) = 1; (i) <= (int)(n); (i)++) ++c[x[i] = s[i]];
    for (int i = 2; i <= m; ++i) c[i] += c[i - 1];
    for (int i = n; i >= 1; --i) sa[c[x[i]]--] = i;
    for (int k = 1; k <= n; k <<= 1) {
      int num = 0;
      for (int i = n - k + 1; i <= n; ++i) y[++num] = i;
      for (int i = 1; i <= n; ++i)
        if (sa[i] > k) y[++num] = sa[i] - k;
      for (int i = 1; i <= m; ++i) c[i] = 0;
      for (int i = 1; i <= n; ++i) ++c[x[i]];
      for (int i = 2; i <= m; ++i) c[i] += c[i - 1];
      for (int i = n; i >= 1; --i) {
        sa[c[x[y[i]]]--] = y[i];
        y[i] = 0;
      }
      swap(x, y);
      x[sa[1]] = 1;
      num = 1;
      for (int i = 2; i <= n; ++i)
        x[sa[i]] =
            (y[sa[i]] == y[sa[i - 1]] && y[sa[i] + k] == y[sa[i - 1] + k])
                ? num
                : ++num;
      if (num == n) break;
      m = num;
    }
  }
} sa;
int T[2000015][22];
void init(int n) {
  for (int j = 1; (1 << j) <= n; j++) {
    for (int i = 1; i + (1 << j) - 1 <= n; i++) {
      T[i][j] = min(T[i][j - 1], T[i + (1 << (j - 1))][j - 1]);
    }
  }
}
int qym(int l, int r) {
  int x = log(r - l + 1) / log(2);
  int y = min(T[l][x], T[r - (1 << x) + 1][x]);
  return y;
}
void pp(int pos) {
  for (int(i) = 0; (i) < (int)(B - A); (i)++) printf("(");
  for (int i = pos; i < pos + n; i++) printf("%c", s[i] == 'a' ? '(' : ')');
  for (int(i) = 0; (i) < (int)(A - B); (i)++) printf(")");
  puts("");
  exit(0);
}
int main() {
  scanf("%s", s + 1);
  n = strlen(s + 1);
  for (int(i) = 1; (i) <= (int)(n); (i)++) {
    int id = i;
    if (s[i] == '(') {
      A++;
      s[i] = s[i + n] = 'a';
      T[id][0] = T[id - 1][0] + 1;
    } else {
      B++;
      s[i] = s[i + n] = 'b';
      T[id][0] = T[id - 1][0] - 1;
    }
  }
  for (int i = n + 1; i <= n + n; i++)
    T[i][0] = T[i - 1][0] + (s[i] == 'a' ? 1 : -1);
  init(n + n);
  sa.get_SA(s, n + n, 122);
  for (int(i) = 1; (i) <= (int)(n + n); (i)++) {
    int pos = sa.sa[i];
    if (pos > n) continue;
    int mi = qym(pos, pos + n - 1) - T[pos - 1][0];
    if (A < B) {
      if (B - A + mi >= 0) pp(pos);
    } else {
      if (mi >= 0) pp(pos);
    }
  }
  return 0;
}
