영어 괄호 읽기
시간 제한8초메모리 제한512 MB
영어로 적힌 중첩 목록 문장을 읽어 대응하는 S-표현식을 출력합니다. 해석이 두 가지 이상이면 AMBIGUOUS를 출력합니다.
문제
순이와 그의 교수는 Lisp와 S-expression을 연구하고 있다. 순이는 연구 발표를 하려고 도쿄에 있다. 교수는 오늘 다른 일이 있어서 함께 가지 못했다.
한 시간 전, 순이는 슬라이드를 마지막으로 점검하다가 심각한 실수를 발견했다. 실수를 고칠 자료가 충분하지 않아서 곧바로 교수에게 전화를 걸었다.
지금도 둘의 논의는 계속되고 있다. 논의는 어렵게 진행되고 있다. 자료 대부분이 S-expression으로 적혀 있어서, 둘은 전화로 S-expression을 주고받아야 한다.
주어진 영어 문구가 나타내는 S-expression을 출력하는 프로그램을 작성하라.
S-expression을 번역하는 규칙은 다음과 같다.
- 원소가 하나인 S-expression은 "a list of <원소>"로 번역한다. (예: "(A)"는 "a list of A")
- 원소가 두 개인 S-expression은 "a list of <첫 번째 원소> and <두 번째 원소>"로 번역한다. (예: "(A B)"는 "a list of A and B")
- 원소가 세 개보다 많은 S-expression은 "a list of <첫 번째 원소>, <두 번째 원소>, ... and <마지막 원소>"로 번역한다. (예: "(A B C D)"는 "a list of A, B, C and D")
- 위 규칙은 재귀적으로 적용한다. (예: "(A (P Q) B (X Y Z) C)"는 "a list of A, a list of P and Q, B, a list of X, Y and Z and C")
S-expression의 각 원자 원소는 대문자 10자 미만으로 이루어진 문자열이다. 모든 단어("a", "list", "of", "and")와 원자 원소는 공백 한 칸으로 구분되며, 쉼표 앞에는 공백을 넣지 않는다. 빈 S-expression에 해당하는 문구는 입력에 나오지 않는다. 모든 테스트 케이스는 S-expression으로 번역할 수 있지만, 가능한 S-expression은 유일하지 않을 수 있다.
입력
첫 줄에 테스트 케이스의 개수를 나타내는 양의 정수 이 주어진다. 이어서 개의 테스트 케이스가 주어진다. 각 테스트 케이스는 S-expression을 나타내는 영어 문구 한 줄이다. 문구의 길이는 최대 1000자이다.
출력
각 테스트 케이스마다 대응하는 S-expression을 한 줄에 출력한다. 원소 사이에는 공백 한 칸을 넣고, 여는 괄호 "(" 뒤와 닫는 괄호 ")" 앞에는 공백을 넣지 않는다. 문구가 두 개 이상의 서로 다른 S-expression으로 읽히면 AMBIGUOUS를 출력한다.