import java.util.Stack;
class Solution {
static Stack<Character> stack = new Stack<>();
public String solution(String p) {
String answer = "";
if(!p.equals("")) {
answer = search(p);
}
return answer;
}
public static String search(String p) {
Solution b = new Solution();
String str = "";
if(!p.equals("")) {
String u = b.set_u(p);
String v = p.substring(u.length());
if(b.corret_Bracket(u)) {
stack.clear();
str = u + search(v);
}else {
stack.clear();
StringBuilder sb = new StringBuilder();
sb.append('(');
sb.append(search(v));
sb.append(')');
StringBuilder new_u = new StringBuilder(u);
new_u.deleteCharAt(0);
new_u.deleteCharAt(new_u.length() - 1);
sb.append(b.change_u(new_u.toString()));
str = sb.toString();
}
}
return str;
}
public String change_u(String u) {
StringBuilder sb = new StringBuilder();
for(int i = 0; i < u.length(); i++) {
if(u.charAt(i) == ')') {
sb.append('(');
}else {
sb.append(')');
}
}
return sb.toString();
}
public String set_u(String p) {
StringBuilder sb = new StringBuilder();
sb.append(p.charAt(0));
stack.push(p.charAt(0));
for(int i = 1; i < p.length(); i++) {
if(p.charAt(i) == '(' && stack.peek() == ')') {
sb.append(p.charAt(i));
stack.pop();
}else if(p.charAt(i) == ')' && stack.peek() == '(') {
sb.append(p.charAt(i));
stack.pop();
}else {
sb.append(p.charAt(i));
stack.push(p.charAt(i));
}
if(stack.empty()) {
break;
}
}
stack.clear();
return sb.toString();
}
public boolean corret_Bracket(String u) {
stack.push(u.charAt(0));
for(int i = 1; i < u.length(); i++) {
if(u.charAt(i) == ')' && stack.peek() == '(') {
stack.pop();
}else {
stack.push(u.charAt(i));
}
}
return stack.empty();
}
}