import java.util.*;
public class Main{
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String s = sc.nextLine();
        StringBuilder sb = new StringBuilder(s);
        while(sb.indexOf("(") != -1){//只要还有括号,就继续化简
            int k = sb.indexOf(")");//右括号下标
            int j = k;//左括号下标
            StringBuilder sb2 = new StringBuilder();//右括号后面的数
            while(sb.charAt(j) != '(') j--;//左括号下标
            for(int i = k + 1; i < sb.length(); ++i){
                if(sb.charAt(i) >= '0' && sb.charAt(i) <= '9')
                    sb2.append(sb.charAt(i));//右括号后面的数
                else break;
            }
            String sb3 = f(sb.substring(j + 1, k), sb2.toString());//化简这个括号
            sb.replace(j, k + 1 + sb2.length(), sb3);//化简后的内容,替换原内容
        }
        Map<String, Integer> m = g(sb.toString());//统计各原子个数
        List<String> v = new ArrayList<>(m.keySet());
        Collections.sort(v);//字典序排序
        for(String i : v){
            System.out.print(i);
            if(m.get(i) != 1) System.out.print(m.get(i));//单个原子不用写1
        }
    }
    public static String f(String s1, String s2){//化简括号,以及括号右边的数
        StringBuilder r = new StringBuilder();
        int n = Integer.valueOf(s2);//括号右边的数(括号里面的数都要乘它)
        for(int i = 0; i < s1.length(); ++i){
            if(s1.charAt(i) >= 'A' && s1.charAt(i) <= 'Z'){
                r.append(s1.charAt(i));
                i++;
                while(i < s1.length() && s1.charAt(i) >= 'a' && s1.charAt(i) <= 'z')
                    r.append(s1.charAt(i++));
                StringBuilder temp = new StringBuilder();
                while(i < s1.length() && s1.charAt(i) >= '0' && s1.charAt(i) <= '9')
                    temp.append(s1.charAt(i++));
                if(temp.length() != 0) r.append(Integer.valueOf(temp.toString()) * n);
                else r.append(n);
                i--;
            }
        }
        return r.toString();
    }
    public static Map<String, Integer> g(String s){//统计各原子个数
        Map<String, Integer> m = new HashMap<>();
        for(int i = 0; i < s.length(); ++i){
            StringBuilder temp = new StringBuilder();
            if(s.charAt(i) >= 'A' && s.charAt(i) <= 'Z'){
                temp.append(s.charAt(i));
                i++;
                while(i < s.length() && s.charAt(i) >= 'a' && s.charAt(i) <= 'z')
                    temp.append(s.charAt(i++));
                StringBuilder temp2 = new StringBuilder();
                while(i < s.length() && s.charAt(i) >= '0' && s.charAt(i) <= '9')
                    temp2.append(s.charAt(i++));
                if(m.containsKey(temp.toString())){
                    int bwt = m.get(temp.toString());
                    m.put(temp.toString(), bwt + (temp2.length() == 0? 1: Integer.valueOf(temp2.toString())));
                }else m.put(temp.toString(), temp2.length() == 0? 1: Integer.valueOf(temp2.toString()));
                i--;
            }
        }
        return m;
    }
}