아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

애너그램 피라미드

시간 제한2초메모리 제한256 MB

요약
사전에서 단어를 골라 밑단어에서 한 글자씩 지우고 재배열해 꼭대기 단어까지 피라미드를 쌓을 수 있는지 판단합니다.
난이도

보통10점 중 6점

유형
그래프, BFS, 문자열
정답자
아직 제출이 없습니다

문제

20세기 신문 뒷면에는 애너그램 퍼즐이 자주 실렸다. 그중 하나가 애너그램 피라미드로, 단어를 위로 쌓아 올린 것이다. 맨 아래 단어가 NN글자면 그 위 단어는 N−1N-1글자, 그다음은 N−2N-2글자로 한 글자씩 짧아진다. 맨 아래를 제외한 모든 단어는 바로 아래 단어에서 글자 하나를 빼고 남은 글자를 재배열해서 만든다.

애너그램 피라미드의 예는 다음과 같다.

  • PIN
  • SNIP
  • PAINS
  • PIANOS

단어 사전과 두 단어가 주어진다. 하나는 꼭대기에 놓을 단어이고, 하나는 맨 아래에 놓을 단어이다. 맨 아래 단어를 밑변으로, 꼭대기 단어를 꼭대기로 하는 애너그램 피라미드를 쌓을 수 있는지 판정하는 프로그램을 작성하라. 피라미드에 쌓는 단어는 모두 사전에 있어야 한다.

입력

입력은 여러 개의 테스트 케이스로 이루어진다. 파일의 끝까지 처리한다.

각 테스트 케이스의 첫 줄에 사전에 담긴 단어의 개수 NN이 주어진다. (N<100000N < 100000) 다음 NN개의 줄에 단어가 하나씩 주어진다. 그다음 줄에 질의의 개수 MM이 주어진다. (M<10M < 10) 이어지는 MM개의 줄에는 꼭대기 단어와 맨 아래 단어가 공백 하나를 사이에 두고 주어진다. 두 단어는 모두 사전에 있고, 꼭대기 단어가 맨 아래 단어보다 짧다.

모든 단어는 알파벳 1글자 이상 30글자 이하이다. 같은 글자의 대문자와 소문자는 같은 글자로 본다.

출력

각 테스트 케이스마다 Case, 공백 하나, 테스트 케이스 번호, 콜론을 한 줄에 출력한다. 번호는 입력 전체에서 1부터 차례로 매긴다. 그 뒤에 질의마다 한 줄씩, 입력에 주어진 순서대로 피라미드를 쌓을 수 있으면 yes를, 쌓을 수 없으면 no를 출력한다.

줄 끝에 공백을 붙이지 않고, 테스트 케이스 사이에 빈 줄을 넣지 않는다.

예제3

  1. 예제 1

    입력
    8
    PEN
    PIN
    SNIP
    PINE
    PAINS
    SPAIN
    PIANOS
    SNIPER
    2
    PIN PIANOS
    PEN SNIPER
    
    예상 출력
    Case 1:
    yes
    no
    
  2. 예제 2

    입력
    2
    a
    ab
    1
    a ab
    
    예상 출력
    Case 1:
    yes
    
  3. 예제 3

    입력
    3
    a
    at
    ate
    1
    a ate
    3
    x
    xy
    xyz
    2
    x xyz
    xy xyz
    4
    pen
    pin
    snip
    spin
    2
    pin snip
    pen snip
    
    예상 출력
    Case 1:
    yes
    Case 2:
    yes
    yes
    Case 3:
    yes
    no