토너먼트 대진표

문자열로 주어진 토너먼트 대진표를 해석하고, 모든 선수가 보고한 승리 횟수가 어떤 경기 결과 조합과도 일치할 수 있는지 판정한다.

보통6트리DFS그리디재귀면접 대비아직 제출이 없습니다시간 제한2초메모리 제한512 MB

문제

21XX년, 해마다 열리는 프로그래밍 대회 Japan Algorithmist GrandPrix(JAG)는 가장 인기 있는 마인드 스포츠 대회 중 하나다.

JAG는 단판 승부 토너먼트로 치른다. 대진표는 문자열 하나로 적는다. 예를 들어 [[a-b]-[c-d]]는 참가자 a, b, c, d 네 명의 대진표이고, 경기는 다음과 같다.

  • 1번 경기는 a와 b의 경기다.
  • 2번 경기는 c와 d의 경기다.
  • 3번 경기는 1번 경기 승자와 2번 경기 승자의 경기다.

정확히는 대진표가 다음 BNF를 만족한다.

  • <winner> ::= <person> | "[" <winner> "-" <winner> "]"
  • <person> ::= "a" | "b" | "c" | ... | "z"

당신은 JAG 대회장이고 올해 결과를 발표하려 한다. 그런데 실수로 모든 경기 결과를 잃어버렸다. 다행히 대회가 시작되기 전에 인쇄해 둔 대진표는 남아 있다. 물론 대진표에 결과는 전혀 적혀 있지 않다. 그래서 참가자 전원에게 몇 번 이겼는지 물어 "참가자 aia_iviv_i번 이겼다" 형태의 정보를 NN개 모았다.

이 답변이 모두 참일 수 있는지 판정하라.

입력

입력은 다음 형식의 테스트 케이스 하나로 이루어진다.

S
a1 v1
.
.
.
aN vN

SS는 대진표이며 위 BNF를 만족한다. 이어지는 NN개의 줄은 승수 정보다. i+1i+1번째 줄에는 소문자 aia_i와 음이 아닌 정수 viv_i (vi26v_i \le 26)를 공백 하나로 구분해 주며, 참가자 aia_iviv_i번 이겼다는 뜻이다. NN (2N262 \le N \le 26)은 참가자 수이고 문자열 SS로 알 수 있다. 각 문자 aia_i는 서로 다르다. SS에는 각 aia_i가 정확히 한 번씩 들어 있고 다른 소문자는 들어 있지 않다.

출력

답변이 모두 대진표와 맞으면 첫 줄에 Yes를, 그렇지 않으면 No를 출력한다.