문자열로 주어진 토너먼트 대진표를 해석하고, 모든 선수가 보고한 승리 횟수가 어떤 경기 결과 조합과도 일치할 수 있는지 판정한다.
보통6트리DFS그리디재귀면접 대비아직 제출이 없습니다시간 제한2초메모리 제한512 MB21XX년, 해마다 열리는 프로그래밍 대회 Japan Algorithmist GrandPrix(JAG)는 가장 인기 있는 마인드 스포츠 대회 중 하나다.
JAG는 단판 승부 토너먼트로 치른다. 대진표는 문자열 하나로 적는다. 예를 들어 [[a-b]-[c-d]]는 참가자 a, b, c, d 네 명의 대진표이고, 경기는 다음과 같다.
정확히는 대진표가 다음 BNF를 만족한다.
<winner> ::= <person> | "[" <winner> "-" <winner> "]"<person> ::= "a" | "b" | "c" | ... | "z"당신은 JAG 대회장이고 올해 결과를 발표하려 한다. 그런데 실수로 모든 경기 결과를 잃어버렸다. 다행히 대회가 시작되기 전에 인쇄해 둔 대진표는 남아 있다. 물론 대진표에 결과는 전혀 적혀 있지 않다. 그래서 참가자 전원에게 몇 번 이겼는지 물어 "참가자 ai가 vi번 이겼다" 형태의 정보를 N개 모았다.
이 답변이 모두 참일 수 있는지 판정하라.
입력은 다음 형식의 테스트 케이스 하나로 이루어진다.
S
a1 v1
.
.
.
aN vN
S는 대진표이며 위 BNF를 만족한다. 이어지는 N개의 줄은 승수 정보다. i+1번째 줄에는 소문자 ai와 음이 아닌 정수 vi (vi≤26)를 공백 하나로 구분해 주며, 참가자 ai가 vi번 이겼다는 뜻이다. N (2≤N≤26)은 참가자 수이고 문자열 S로 알 수 있다. 각 문자 ai는 서로 다르다. S에는 각 ai가 정확히 한 번씩 들어 있고 다른 소문자는 들어 있지 않다.
답변이 모두 대진표와 맞으면 첫 줄에 Yes를, 그렇지 않으면 No를 출력한다.