#include <bits/stdc++.h>
using namespace std;
int n, s[2000100];
bool vis[2000100];
char t[2000100];
int sa[2000100], rnk[2000100], tmp[2000100], cnt[2000100];
void build(char *s) {
  int n = strlen(s) + 1, m = 256;
  int *x = rnk, *y = tmp, *z;
  for (int i = 0; i < m; i++) cnt[i] = 0;
  for (int i = 0; i < n; i++) cnt[x[i] = s[i]]++;
  for (int i = 1; i < m; i++) cnt[i] += cnt[i - 1];
  for (int i = n - 1; i >= 0; i--) sa[--cnt[x[i]]] = i;
  for (int j = 1, p = 1; p < n; j <<= 1, m = p) {
    p = 0;
    for (int i = n - j; i < n; i++) y[p++] = i;
    for (int i = 0; i < n; i++)
      if (sa[i] >= j) y[p++] = sa[i] - j;
    for (int i = 0; i < m; i++) cnt[i] = 0;
    for (int i = 0; i < n; i++) cnt[x[i]]++;
    for (int i = 1; i < m; i++) cnt[i] += cnt[i - 1];
    for (int i = n - 1; i >= 0; i--) sa[--cnt[x[y[i]]]] = y[i];
    z = x, x = y, y = z;
    x[sa[0]] = 0, p = 1;
    for (int i = 1; i < n; i++)
      x[sa[i]] = (y[sa[i]] == y[sa[i - 1]] && y[sa[i] + j] == y[sa[i - 1] + j])
                     ? p - 1
                     : p++;
  }
  for (int i = 0; i < n; i++) rnk[sa[i]] = i;
}
int main() {
  scanf("%s", t + 1);
  n = strlen(t + 1);
  int mn = 0;
  for (int i = 1; i <= n; i++) {
    s[i] = s[i - 1];
    if (t[i] == '(')
      s[i]++;
    else
      s[i]--;
    mn = min(mn, s[i]);
  }
  for (int i = 1; i <= n; i++) t[n + i] = t[i], s[i + n] = s[i] + s[n];
  int dn = 0;
  if (s[n] < 0) dn = -s[n];
  build(t + 1);
  multiset<int> S;
  for (int i = n + 1; i <= 2 * n; i++) S.insert(s[i]);
  int k, p = 1e9;
  for (int i = n; i >= 0; i--) {
    int t = *S.begin();
    S.erase(S.find(s[i + n]));
    if (t - s[i] + dn >= 0) {
      if (rnk[i] < p) p = rnk[i], k = i + 1;
    }
    S.insert(s[i]);
  }
  int sum = s[n];
  if (sum < 0)
    for (int i = sum; i < 0; i++) putchar('(');
  for (int i = 0; i < n; i++) putchar(t[k + i]);
  if (sum > 0)
    for (int i = 0; i < sum; i++) putchar(')');
  return 0;
}
