다음과 같이 정의된 언어를 생각해 봅시다. 이 언어의 표현식(expression) 은 다음 두 가지 중 하나입니다.
표현식의 평탄화(flattening) 는 다음과 같이 정의됩니다.
즉, $f(e)$ 를 $e$ 의 평탄화라 하고 $+$ 를 문자열 이어 붙이기라 하면, $f\big((e_1\ e_2\ \cdots\ e_t\ n)\big)$ 는 다음과 같습니다.
$$ \underbrace{f(e_1)+f(e_2)+\cdots+f(e_t)}{1} + \underbrace{f(e_1)+f(e_2)+\cdots+f(e_t)}{2} + \cdots + \underbrace{f(e_1)+f(e_2)+\cdots+f(e_t)}_{n} $$
아래 표는 몇 가지 표현식과 그 평탄화 결과를 보여 줍니다.
| 표현식 | 평탄화 결과 |
|---|---|
w | w |
(c 4) | cccc |
(a (b c 2) 3) | abcbcabcbcabcbc |
주어진 표현식을 평탄화하는 프로그램을 작성하세요.
입력은 하나 이상의 테스트 케이스로 이루어집니다. 각 테스트 케이스는 문법에 맞게 작성된 표현식 하나이며, $ 문자가 그 표현식의 끝을 나타냅니다. 입력의 마지막 줄은 테스트 케이스가 아니며, $ 문자 하나만으로 이루어집니다(앞뒤에 공백이 있을 수 있습니다).
입력의 모든 표현식은 위에서 정의한 문법에 따라 문법적으로 올바릅니다. 표현식에는 앞, 뒤, 중간에 공백이 있을 수 있으며, 이러한 공백은 모두 무시해야 합니다. 문자와 숫자는 서로 최소한 하나의 공백으로 구분됩니다.
각 테스트 케이스의 표현식에 대해, 그 평탄화 결과를 한 줄에 하나씩 출력하세요. 출력에는 줄바꿈 외의 어떤 공백도 있어서는 안 됩니다.