잉크를 엎질렀다
시간 제한1초메모리 제한512 MB
숨겨진 글자(#)가 있는 문자열과 Z 배열이 주어졌을 때, 둘을 모두 만족하는 문자열을 복원하거나 그런 문자열이 없음을 판별합니다.
문제
디디는 알파벳 대문자(A-Z)로 구성된 문자열 에 대해, 과 의 부분 문자열 의 가장 긴 공통 접두사의 길이를 라고 정의했다. 디디는 오랜 공부 끝에 찾은 알고리즘으로 이 값들로 이루어진 배열 를 완성했다. 그런데 기쁨에 겨워 춤을 추다가 문자열 의 일부에 잉크를 엎질렀고, 그 바람에 자신이 만든 배열 가 올바른지 확인할 수 없게 되었다.
착한 ryute는 절망에 빠진 디디를 돕고자 한다. 일부 문자가 가려진 문자열 와 디디가 작성한 배열 를 이용해 원본 문자열 를 복원한다. 또한 디디가 만든 배열 가 올바른지도 확인한다. 원본 문자열 로 가능한 경우가 하나라도 있다면 배열 는 올바른 것으로 간주하고, 그렇지 않다면 올바르지 않은 것으로 간주한다. ryute를 따라 디디를 도와주자.
입력
첫째 줄에 문자열 의 길이 이 주어진다. ()
둘째 줄에 문자열 가 주어진다. 는 알파벳 대문자(A-Z)와 #으로 구성되어 있다. #은 해당 글자가 잉크에 가려졌다는 뜻이며, #의 개수는 20개를 넘지 않는다.
셋째 줄에 디디가 작성한 배열 의 원소 ()가 순서대로 공백으로 구분되어 주어진다.
출력
디디가 만든 배열 가 올바르지 않다면 THINKINGFACE를 출력한다. 그렇지 않다면 첫째 줄에 YES, 둘째 줄에 원본 문자열 를 출력한다. 로 가능한 문자열이 여러 개라면 그중 하나를 출력한다.