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

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

새 젖소 RFID 코드

시간 제한1초메모리 제한128 MB

요약
각 자리에 쓸 수 있는 서로 다른 글자들이 주어질 때, 한 코드 안에서 글자가 겹치지 않는 유효한 코드들을 사전순으로 나열하고 start번부터 finish번까지 출력한다.
난이도

보통10점 중 6점

유형
백트래킹, 조합론, 수학, 구현
정답자
아직 제출이 없습니다

문제

존 아저씨는 벌겋게 달군 인두로 낙인을 찍는 대신 젖소에게 RFID 태그를 사용하기로 했습니다.

각 RFID 태그에는 길이가 정확히 NN (3≤N≤153 \le N \le 15)인 코드가 저장됩니다. 코드의 각 문자는 알파벳 대문자 A부터 Z 중 하나이며, 하나의 코드 안에서 같은 문자가 두 번 이상 나타나지 않습니다.

코드의 각 자리에 쓰이는 문자는 그 자리마다 미리 정해진 허용 문자 집합에서 고릅니다. 각 집합은 알파벳 순서로 주어집니다.

기계는 유효한 모든 코드를 알파벳(사전) 순서로 나열하고 11번부터 번호를 매깁니다. 새로운 젖소 무리는 아직 쓰지 않은 다음 코드들을 순서대로 사용하며, 존 아저씨는 지금까지 사용한 코드의 개수를 기록해 둡니다.

다음 무리가 사용할 첫 번째 코드와 마지막 코드의 번호 start\text{start}와 finish\text{finish}가 주어집니다 (1≤start<finish≤22,000,0001 \le \text{start} < \text{finish} \le 22{,}000{,}000, finish−start<2000\text{finish} - \text{start} < 2000). start\text{start}번부터 finish\text{finish}번까지의 코드를 알파벳 순서로 모두 출력하세요.

입력

  • 첫째 줄에 세 정수 NN, start\text{start}, finish\text{finish}가 공백으로 구분되어 주어집니다.
  • 다음 NN개의 줄에는 각 자리에 허용되는 문자들이 주어집니다. 각 줄은 서로 다른 대문자 11개 이상 2626개 이하로 이루어진 문자열이며, 알파벳 순서로 정렬되어 있습니다.

출력

finish−start+1\text{finish} - \text{start} + 1개의 줄을 출력합니다. ii번째 줄에는 start+i−1\text{start} + i - 1번 코드를 출력합니다. (코드는 알파벳 순서로 11번부터 번호가 매겨집니다.)

예제2

  1. 예제 1

    입력
    4 6 13
    ABC
    CDELQ
    CFH
    ABC
    
    예상 출력
    ADHB
    ADHC
    AECB
    AEFB
    AEFC
    AEHB
    AEHC
    ALCB
    
  2. 예제 2

    입력
    4 1 20
    A
    CDELQ
    CFH
    BC
    
    예상 출력
    ACFB
    ACHB
    ADCB
    ADFB
    ADFC
    ADHB
    ADHC
    AECB
    AEFB
    AEFC
    AEHB
    AEHC
    ALCB
    ALFB
    ALFC
    ALHB
    ALHC
    AQCB
    AQFB
    AQFC