#include <bits/stdc++.h>
using namespace std;
const int maxn = 4.1e6;
string str, pstr;
int n, ans, nst[maxn], pos[maxn];
multiset<int> S;
inline int idx(char c) { return c == '(' ? 1 : -1; }
void prepare() {
  n = str.size(), str += str;
  for (int i = 1; i <= n; ++i) ans += idx(str[i - 1]);
  for (int i = 1; i <= (int)str.size(); ++i)
    nst[i] = nst[i - 1] + idx(str[i - 1]);
  for (int i = 1; i <= n; ++i) S.insert(nst[i]);
  for (int i = 1; i <= n; ++i) {
    if (*S.begin() - min(ans, 0) - nst[i - 1] >= 0) pos[i - 1] = 1;
    S.insert(nst[i + n]), S.erase(S.find(nst[i]));
  }
}
void min_iso() {
  for (int i = 1; i <= abs(ans); ++i) pstr += ans > 0 ? ')' : '(';
  if (ans < 0) cout << pstr;
  int i, j, k, l;
  for (i = -1, j = 0, k = 0; i < n && j < n && k < n;) {
    if (!pos[j]) {
      j++;
      continue;
    }
    if (i == -1) {
      i = j, j++;
      continue;
    }
    int t = idx(str[i + k]) - idx(str[j + k]);
    if (!t)
      k++;
    else {
      if (t > 0)
        j += k + 1;
      else
        l = i + k, i = j, j = max(l, j) + 1;
      k = 0;
    }
  }
  cout << str.substr(i, n);
  if (ans > 0) cout << pstr;
}
int main() {
  cin >> str;
  prepare();
  min_iso();
}
