도영이는 자신이 매우 똑똑하다고 생각한다. 동진이는 그런 도영이의 콧대를 꺾으려고 문제 하나를 준비했다.
{ }로 둘러싸인 리스트를 뜻해. 리스트는 비어 있을 수도 있고, 원소로 다른 집합이나 주어진 알파벳의 한 글자를 가질 수 있어."동진이는 집합의 문법을 다음과 같이 정의했다. (이것은 실제 집합의 정의가 아니라, 도영이를 골탕 먹이려고 만든 것일 뿐이다.)
Set ::= "{" Elementlist "}"
Elementlist ::= <empty> | List
List ::= Element | Element "," List
Element ::= Atom | Set
Atom ::= "{" | "}" | ","
여기서 \<empty>는 리스트가 비어 있을 수도 있음을 의미한다.
핵심은, 원소로 쓸 수 있는 알파벳 한 글자가 하필 문법에서 중요한 역할을 하는 기호 {, }, ,와 똑같다는 점이다. 이 겹침 때문에 어떤 문자열이 집합인지 판별하는 일은 생각보다 까다롭다. 위 문법에 따라 주어진 문자열이 올바른 집합인지 효율적으로 판별하는 프로그램을 작성하라.
첫째 줄에 판별할 문자열의 개수 $N$이 주어진다.
둘째 줄부터 $N$개의 줄에 걸쳐, 문법적으로 집합인지 판별해야 하는 문자열이 한 줄에 하나씩 주어진다. 각 문자열의 길이는 $1$ 이상 $200$ 이하이며, 오직 {, }, , 세 문자로만 이루어져 있다.
각 문자열에 대해 한 줄씩 출력한다. $i$번째($i$는 $1$부터 시작한다) 문자열이 문법적으로 집합이면 Word #i: Set을, 집합이 아니면 Word #i: No Set을 출력한다.