#include <bits/stdc++.h>
using namespace std;
template <class T>
inline bool getmin(T *a, const T &b) {
  if (b < *a) {
    *a = b;
    return true;
  }
  return false;
}
template <class T>
inline bool getmax(T *a, const T &b) {
  if (b > *a) {
    *a = b;
    return true;
  }
  return false;
}
template <class T>
inline void read(T *a) {
  char c;
  while (isspace(c = getchar())) {
  }
  bool flag = 0;
  if (c == '-')
    flag = 1, *a = 0;
  else
    *a = c - 48;
  while (isdigit(c = getchar())) *a = *a * 10 + c - 48;
  if (flag) *a = -*a;
}
const int mo = 1000000007;
template <class T>
T pow(T a, T b, int c = mo) {
  T res = 1;
  for (T i = 1; i <= b; i <<= 1, a = 1LL * a * a % c)
    if (b & i) res = 1LL * res * a % c;
  return res;
}
const int N = 2100000;
unsigned long long h[N];
unsigned long long e[N];
int h2[N], e2[N];
char s[N];
int n;
unsigned long long get(int x, int l) { return h[x + l - 1] - h[x - 1] * e[l]; }
int get2(int x, int l) {
  return (h2[x + l - 1] - 1LL * h2[x - 1] * e2[l] % mo + mo) % mo;
}
bool cmp(int x, int y) {
  int l = 1, r = n, z = 0;
  if (!y) return true;
  while (l <= r) {
    int mid = (l + r) >> 1;
    if (get(x, mid) == get(y, mid) && get2(x, mid) == get2(y, mid))
      z = mid, l = mid + 1;
    else
      r = mid - 1;
  }
  return s[x + z] < s[y + z];
}
set<pair<int, int> > S;
int a[N];
int main() {
  scanf("%s", s + 1);
  n = strlen(s + 1);
  for (int i = (1); i <= (n); ++i) s[n + i] = s[i];
  e[0] = 1;
  e2[0] = 1;
  for (int i = (1); i <= (2 * n); ++i) e[i] = e[i - 1] * 1331;
  for (int i = (1); i <= (2 * n); ++i) e2[i] = 1LL * e2[i - 1] * 1331 % mo;
  for (int i = (1); i <= (2 * n); ++i) h[i] = h[i - 1] * 1331 + s[i];
  for (int i = (1); i <= (2 * n); ++i)
    h2[i] = (1LL * h2[i - 1] * 1331 % mo + s[i]) % mo;
  int x = 0, y = 0;
  for (int i = (1); i <= (n); ++i)
    if (s[i] == '(')
      a[i] = a[i - 1] + 1, ++x;
    else
      a[i] = a[i - 1] - 1, ++y;
  for (int i = (1); i <= (n); ++i) S.insert(std::make_pair(a[i], i));
  int ans = 0;
  if (x > y) {
    int tmp = 0;
    for (int i = (1); i <= (n); ++i) {
      if (S.begin()->first - tmp >= 0)
        if (cmp(i, ans)) ans = i;
      set<pair<int, int> >::iterator it = S.find(std::make_pair(a[i], i));
      S.erase(it);
      if (s[i] == '(')
        ++tmp;
      else
        --tmp;
      S.insert(std::make_pair(x - y + tmp, i));
    }
    for (int i = (ans); i <= (ans + n - 1); ++i) putchar(s[i]);
    for (int i = (1); i <= (x - y); ++i) putchar(')');
  } else {
    int tmp = 0;
    for (int i = (1); i <= (n); ++i) {
      if (S.begin()->first - tmp >= x - y)
        if (cmp(i, ans)) ans = i;
      set<pair<int, int> >::iterator it = S.find(std::make_pair(a[i], i));
      S.erase(it);
      if (s[i] == '(')
        ++tmp;
      else
        --tmp;
      S.insert(std::make_pair(x - y + tmp, i));
    }
    for (int i = (1); i <= (y - x); ++i) putchar('(');
    for (int i = (ans); i <= (ans + n - 1); ++i) putchar(s[i]);
  }
  cout << endl;
  return 0;
}
