#include <bits/stdc++.h>
using namespace std;
const int NMax = 2000010;
char A[NMax];
int N, can[NMax], H[NMax], min1[NMax], min2[NMax], H1[NMax];
int main() {
  scanf("%s", A);
  N = strlen(A);
  int last = 0;
  for (int i = 0; i < N; i++) A[N + i] = A[i];
  for (int i = 0; i < N; i++) {
    if (A[i] == '(')
      H[i] = last + 1;
    else
      H[i] = last - 1;
    last = H[i];
  }
  min1[0] = H[0];
  for (int i = 1; i < N; i++) min1[i] = min(min1[i - 1], H[i]);
  min2[N - 1] = H[N - 1];
  for (int i = N - 2; i >= 0; i--) min2[i] = min(min2[i + 1], H[i]);
  for (int i = 0; i < N; i++)
    if (A[i] == '(') {
      int flag = 1;
      int delta = -1;
      if (A[i] == '(') delta = 1;
      if (min2[i] - H[i] + delta < 0) flag = 0;
      if (i > 0 && min1[i - 1] + H[N - 1] - H[i] + delta < 0) flag = 0;
      if (H[N - 1] > 0) can[i] = flag;
    }
  for (int i = 0; i < N; i++)
    if (H[N - 1] == 0) can[i] = 1;
  last = 0;
  for (int i = N - 1; i >= 0; i--) {
    if (A[i] == ')')
      H1[N - i - 1] = last + 1;
    else
      H1[N - i - 1] = last - 1;
    last = H1[N - i - 1];
  }
  min1[0] = H1[0];
  for (int i = 1; i < N; i++) min1[i] = min(min1[i - 1], H1[i]);
  min2[N - 1] = H1[N - 1];
  for (int i = N - 2; i >= 0; i--) min2[i] = min(min2[i + 1], H1[i]);
  for (int i = 0; i < N; i++)
    if (A[N - i - 1] == ')') {
      int flag = 1;
      int delta = -1;
      if (A[N - i - 1] == ')') delta = 1;
      if (min2[i] - H1[i] + delta < 0) flag = 0;
      if (i > 0 && min1[i - 1] + H1[N - 1] - H1[i] + delta < 0) flag = 0;
      if (H[N - 1] < 0) can[(N - (i - 1 + N) % N - 1 + N) % N] = flag;
    }
  for (int i = 0; i < N; i++) can[i + N] = can[i];
  int p1 = 0, p2 = 1, pos = -1;
  while (p1 < 2 * N && !can[p1]) p1 = p1 + 1;
  p2 = p1 + 1;
  while (p2 < 2 * N && !can[p2]) p2 = p2 + 1;
  while (p1 < N && p2 < N) {
    if (A[p2] > A[p1]) {
      p2 = p2 + 1;
      while (p2 < 2 * N && !can[p2]) p2 = p2 + 1;
    } else if (A[p2] < A[p1]) {
      p1 = p2;
      p2 = p2 + 1;
      while (p2 < 2 * N && !can[p2]) p2 = p2 + 1;
    } else {
      int k = 1;
      while (k < 2 * N && A[p1 + k] == A[p2 + k]) k++;
      if (A[p1 + k] > A[p2 + k]) {
        p1 = p1 + k + 1;
        while (p1 < 2 * N && !can[p1]) p1 = p1 + 1;
      } else {
        p2 = p2 + k + 1;
        while (p2 < 2 * N && !can[p2]) p2 = p2 + 1;
      }
    }
    if (p1 == p2) {
      p2 = p1 + 1;
      while (p2 < 2 * N && !can[p2]) p2 = p2 + 1;
    } else if (p1 > p2)
      swap(p1, p2);
  }
  pos = p2;
  if (p1 < p2) pos = p1;
  if (pos >= N) pos -= N;
  if (H[N - 1] > 0) {
    printf("%c", A[pos]);
    for (int i = (pos + 1) % N; i != pos; i = (i + 1) % N) printf("%c", A[i]);
    while (H[N - 1]--) printf(")");
  } else {
    while (H[N - 1]++) printf("(");
    printf("%c", A[pos]);
    for (int i = (pos + 1) % N; i != pos; i = (i + 1) % N) printf("%c", A[i]);
  }
  puts("");
  getchar();
  getchar();
  return 0;
}
