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

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

포스트 대응 문제

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

요약
A 쪽 연결과 B 쪽 연결이 같아지는 인덱스 열을, 길이가 m 미만인 범위에서 가장 짧고 사전순으로 가장 앞서게 찾는다.
난이도

어려움10점 중 8점

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

문제

같은 길이 nn을 가지는, 비어 있지 않은 문자열 두 수열이 주어진다.

A=(a1,a2,…,an)B=(b1,b2,…,bn)\begin{aligned} A &= (a_1, a_2, \dots, a_n) \\ B &= (b_1, b_2, \dots, b_n) \end{aligned}

또한 양의 정수 mm이 주어진다. 각 iji_j가 11 이상 nn 이하이고(중복 허용) 0<k<m0 < k < m을 만족하는 인덱스 수열 i1,i2,…,iki_1, i_2, \dots, i_k가 존재하여, AA에서 고른 문자열들을 순서대로 이어 붙인 결과와 BB에서 같은 인덱스로 고른 문자열들을 이어 붙인 결과가 같아지는지 판정하라.

ai1ai2⋯aik=bi1bi2⋯bika_{i_1} a_{i_2} \cdots a_{i_k} = b_{i_1} b_{i_2} \cdots b_{i_k}

예를 들어 A=(a, abaaa, ab)A = (a,\ abaaa,\ ab), B=(aaa, ab, b)B = (aaa,\ ab,\ b)이면 인덱스 (2,1,1,3)(2, 1, 1, 3)이 조건을 만족한다. 양쪽 모두 abaaaaaababaaaaaab가 되기 때문이다.

입력

첫째 줄에 정수 mm, 둘째 줄에 정수 nn이 주어진다. 이어지는 2n2n개의 줄에는 문자열 a1,…,ana_1, \dots, a_n과 b1,…,bnb_1, \dots, b_n이 순서대로 한 줄에 하나씩 주어진다. 모든 문자열은 비어 있지 않으며 길이는 최대 2020이고, m×n≤40m \times n \le 40이다.

출력

조건을 만족하는 수열은 유일하지 않을 수 있으므로, 정해진 하나만 출력한다. 모든 유효한 수열 중 길이 kk가 가장 작은 것을 고르고, 그러한 수열이 여러 개면 사전순으로 가장 앞서는 것(인덱스 목록을 앞에서부터 원소 단위로 비교)을 고른다.

그런 수열이 존재하면 첫 줄에 kk를, 이어서 인덱스 i1,i2,…,iki_1, i_2, \dots, i_k를 순서대로 한 줄에 하나씩 출력한다. 존재하지 않으면 No solution. 한 줄만 출력한다.

예제2

  1. 예제 1

    입력
    7
    3
    a
    abaaa
    ab
    aaa
    ab
    b
    
    예상 출력
    4
    2
    1
    1
    3
    
  2. 예제 2

    입력
    10
    3
    abc
    def
    ghi
    bcd
    efg
    hia
    
    예상 출력
    No solution.