멜로디

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

요약
각 음이 S자리 숫자로 표현될 때, 인접한 두 음의 해밍 거리가 G 이하가 되도록 연주할 음들을 골라 원곡과의 차이(실수)를 최소화하고, 그중 사전순으로 가장 작은 수열을 구하는 문제입니다.
난이도

보통10점 중 6점

유형
동적 계획법, 문자열, 그래프
정답자
아직 제출이 없습니다

문제

Linas는 독특한 관악기를 연주한다. 이 악기에는 구멍이 SS개 있으며, Linas는 11번부터 NN번까지 번호가 매겨진 서로 다른 음 NN개를 낼 수 있다. 각 음은 모든 구멍을 특정한 방식으로 막아서 내며, 이는 SS개의 숫자로 이루어진 수열로 표현된다. jj번째 숫자는 jj번째 구멍을 막는 방법을 나타내고, 막는 방법은 00부터 99까지 1010가지 중 하나이다. 어떤 음에도 해당하지 않는 방식으로 구멍을 막으면 악기가 불쾌한 소리를 내므로, Linas는 항상 어떤 유효한 음에 해당하도록 구멍을 막는다.

Linas는 LL개의 음으로 이루어진 곡을 연주하려고 한다. 그러나 그는 완벽하지 않다. 다음 음이 현재 음과 최대 GG개의 구멍에서만 다를 때(즉 두 음의 숫자 수열이 서로 다른 위치가 최대 GG개일 때)에만 이어서 연주할 수 있다. 이 때문에 그는 때때로 악보에 적힌 음과 다른 음을 연주해야 한다. 실제로 연주한 음이 악보에 적힌 음과 다른 위치를 각각 실수라고 부른다.

주어진 악보에 대해, 이웃한 두 음이 항상 최대 GG개의 구멍에서만 다르도록 하면서 실수의 개수를 최소로 만드는, 실제로 연주할 음들을 정하라.

입력

첫째 줄에 세 정수 NN, SS, GG가 주어진다 (1≤N≤1001 \le N \le 100, 0≤G<S≤1000 \le G < S \le 100). 각각 음의 개수, 구멍의 개수, 이웃한 두 음 사이에서 바꿀 수 있는 구멍의 최대 개수이다.

다음 NN개의 줄에는 각 음이 공백 없이 SS개의 숫자로 주어진다. jj번째 숫자는 그 음에서 jj번째 구멍을 막는 방법이며 00부터 99까지의 값이다. 서로 같은 음은 없다.

그다음 줄에는 곡의 길이 LL이 주어진다 (1≤L≤1051 \le L \le 10^5).

마지막 줄에는 악보의 음이 순서대로 11 이상 NN 이하의 정수 LL개로, 공백으로 구분되어 주어진다.

출력

두 줄을 출력한다.

첫째 줄에는 실수의 최소 개수인 음이 아닌 정수 하나를 출력한다.

둘째 줄에는 이 최소 실수 개수를 달성하는, 이웃한 두 음이 항상 최대 GG개의 구멍에서만 다른 유효한 곡을 이루는 음 LL개를 공백으로 구분하여 출력한다. 그러한 곡이 여러 개이면, 음 번호의 수열로 비교했을 때 사전순으로 가장 앞서는 것을 출력한다.

예제6

  1. 예제 1

    입력
    5 4 2
    1111
    2101
    2000
    0100
    0000
    7
    1 5 4 5 3 2 1
    
    예상 출력
    1
    1 2 4 5 3 2 1
    
  2. 예제 2

    입력
    1 3 0
    012
    4
    1 1 1 1
    
    예상 출력
    0
    1 1 1 1
    
  3. 예제 3

    입력
    3 2 1
    00
    11
    01
    1
    2
    
    예상 출력
    0
    2
    
  4. 예제 4

    입력
    3 2 0
    00
    11
    22
    5
    1 2 2 3 3
    
    예상 출력
    3
    2 2 2 2 2
    
  5. 예제 5

    입력
    4 3 1
    000
    001
    011
    111
    6
    1 2 3 4 3 2
    
    예상 출력
    0
    1 2 3 4 3 2
    
  6. 예제 6

    입력
    4 2 1
    00
    01
    10
    11
    5
    1 4 1 4 1
    
    예상 출력
    2
    1 1 1 1 1