import java.util.Scanner;
import java.util.Stack;
public class Main
{
public static void main(String[] args )
{
Scanner sr =new Scanner(System.in);
String str=sr.next();
sr.close();
StringBuffer sb=new StringBuffer(openString(str));
System.out.println(sb.reverse());
}
public static String openString(String str) {
if(!str.matches(".*\\d+.*")) {
return str;
}
Stack stack=new Stack();
int left=0;
int right=0;
//左右指针分别指向每次处理最里面一层的字符串
for(int i=0;i<str.length();i++)
{
char c=str.charAt(i);
if(!(c==')'||c==']'||c=='}'))
{
stack.push(c);
}
else {
right=i;
break;
}
}
//遍历先找到最前面的")"、"]"、"}" ,在此之前全部存栈
left=right;
char sc=(char) stack.pop();
left--;
String s="";
while(!(sc=='('||sc=='['||sc=='{')) //弹栈找到最近的"("、"["、"{",在找到之前都是叠加的,全部存储
{
s=sc+s;
sc=(char)stack.pop();
left--;
}
sc=(char) stack.pop();
int count=(int)sc-(int)'0'; //取出数字,叠加展开
left--;
String ss="";
while(count>0) {
ss+=s;
count--;
}
str=str.substring(0,left)+ss+str.substring(right+1,str.length()); //替换原数组中的处理部分,递归。
return openString(str);
}
}