#include<bits/stdc++.h>
#define ll long long
#define rep(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
struct D{
ll id;//STL栈没自带下标访问,id作为下标方便记录
char value;
};
stack<D> d;
string s;
bool ispair[1000];//每个元素是否被配对
map<char,char> pa;
int main(){
cin.tie(0);cout.tie(0);
cin>>s;
pa[')']='(';pa['(']=')';pa[']']='[';pa['[']=']';//方便匹配
for(int i=0;i<s.size();i++){
if(!d.empty()){
if(s[i]==')'||s[i]==']'){//右括号才能进行配对
if(d.top().value==pa[s[i]]){//栈顶有配对符号,弹出栈顶并将两个括号标记为已配对
ispair[i]=ispair[d.top().id]=1;
d.pop();
continue;
}
}
}
d.push(D{i,s[i]});
}
for(int i=0;i<s.size();i++){
if(!ispair[i]){
if(s[i]==']'||s[i]==')'){
cout<<pa[s[i]]<<s[i];//输出顺序有差别
}else{
cout<<s[i]<<pa[s[i]];
}
}else{
cout<<s[i];//已配对直接输出
}
}
return 0;
}