#include<iostream>
#include<vector>
#include<stack>
using namespace std;
struct node{
char pare;
int num;
int jud;
};
node temp_node;
vector<char> ans;
vector<node> firs;
stack<node> firs_pare;
int main(){
string s;
cin >> s;
node* tem;
for(int i = 0;i < s.length();i ++){
if(firs_pare.empty()){
temp_node.pare = s[i];
temp_node.num = i;
temp_node.jud = 0;
firs.push_back(temp_node);
firs_pare.push(temp_node);
}else{
tem = &firs_pare.top();
temp_node.pare = s[i];
temp_node.num = i;
temp_node.jud = 0;
firs.push_back(temp_node);
firs_pare.push(temp_node);
if(tem->pare == '(' && s[i] == ')'){
firs[tem->num].jud = 2;
firs[i].jud = 3;
firs_pare.pop(); firs_pare.pop();
}else if(tem->pare == '[' && s[i] == ']'){
firs[tem->num].jud = 4;
firs[i].jud = 5;
firs_pare.pop(); firs_pare.pop();
}else{
continue;
}
}
}
for(auto it = firs.begin();it != firs.end();it ++){
if(it->jud == 0 && (it->pare == '(' || it->pare == ')')){
printf("()");
}else if(it->jud == 0 && (it->pare == '[' || it->pare == ']')){
printf("[]");
}else{
printf("%c",it->pare);
}
}
return 0;
}