#include <bits/stdc++.h>
const int N = 1000100;
char S[N << 1];
bool can[N];
void move(int &i, int n) {
  while (i < n && !can[i]) {
    i++;
  }
}
int min_present(int n) {
  int p1 = 0, p2 = 1, k = 0;
  move(p1, n);
  p2 += p1;
  move(p2, n);
  while (p1 < n && p2 < n && k < n) {
    int n1 = p1 + k;
    if (n1 >= n) n1 -= n;
    int n2 = p2 + k;
    if (n2 >= n) n2 -= n;
    if (S[n1] < S[n2])
      p2 += k + 1, k = 0, move(p2, n);
    else if (S[n1] > S[n2])
      p1 += k + 1, k = 0, move(p1, n);
    else
      k++;
    if (p1 == p2) p2++, move(p1, n);
  }
  return std::min(p1, p2);
}
int sum[N << 1], min[N << 1];
int Q[N << 1];
int main() {
  scanf("%s", S);
  int n = strlen(S);
  int l = 0;
  for (int i = 0; i < n; i++)
    if (S[i] == '(') {
      l++;
      sum[i] = sum[i + n] = 1;
    } else {
      l--;
      sum[i] = sum[i + n] = -1;
    }
  for (int i = 0; i < n; i++) S[i + n] = S[i];
  for (int i = 1; i < n << 1; i++) sum[i] += sum[i - 1];
  int front = 0, rear = 0;
  for (int i = 0; i < n * 2; i++) {
    while (front < rear && Q[front] + n - 1 < i) {
      front++;
    }
    while (front < rear && sum[Q[rear - 1]] >= sum[i]) {
      --rear;
    }
    Q[rear++] = i;
    min[i - n + 1] = sum[Q[front]];
  }
  for (int i = 0; i < n; i++) {
    if (i) min[i] -= sum[i - 1];
    if (min[i] < 0 && min[i] - l < 0) continue;
    can[i] = true;
  }
  int res = min_present(n);
  if (l < 0)
    for (int i = 0; i < -l; i++) putchar('(');
  for (int i = res; i < res + n; i++) putchar(S[i]);
  if (l > 0)
    for (int i = 0; i < l; i++) putchar(')');
  puts("");
  return 0;
}
