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);
    }
}