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

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

천공 카드

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

요약
구멍 뚫린 카드 n장을 위에서 아래로 놓아 각 열에서 처음 만나는 글자가 목표 문자열 s가 되도록 순서를 정하고, 불가능하면 -1을 출력한다.
난이도

보통10점 중 7점

유형
그래프, 위상 정렬, 그리디, 정렬
정답자
아직 제출이 없습니다

문제

프로그래밍 올림피아드가 열리는 회사의 창고에서 천공 카드 nn장이 발견되었다. 천공 카드는 mm개의 칸으로 이루어진 띠이며, 각 칸에는 영소문자가 적혀 있거나 구멍이 뚫려 있다.

올림피아드 심사위원회는 모든 천공 카드를 특정 순서로 정렬하려고 한다. 이 순서대로 카드를 위에서 아래로 포개면, 길이 mm의 주어진 문자열 ss인 올림피아드 구호가 만들어진다.

다시 말해, 카드를 놓을 순서를 고정하고 임의의 위치 ii (1≤i≤m1 \le i \le m)를 살펴보자. 그러면 문자열 ss의 ii번째 문자는 ii번 위치에 문자가 적힌 가장 위쪽 천공 카드의 ii번째 문자와 같아야 한다. 어떤 ii에 대해 ii번 위치에 문자가 있는 천공 카드가 하나도 없다면, 원하는 문자열 ss를 만들 수 없다고 본다.

심사위원회가 천공 카드를 어떤 순서로 놓아야 하는지 알아내도록 도와라.

그림 1: 두 번째 예제의 카드 순서. 위에서 보이는 글자가 강조되어 있다

입력

첫째 줄에는 천공 카드의 수와 칸의 수를 나타내는 두 정수 nn과 mm이 주어진다 (1≤n,m≤100 0001 \le n, m \le 100\,000).

둘째 줄에는 mm개의 영소문자로 이루어진 문자열 ss가 주어진다.

다음 nn개 줄 중 ii번째 줄에는 ii번째 천공 카드의 정보가 주어진다.

정보는 이 카드에서 문자가 있는 위치의 수를 나타내는 정수 k_ik\_i로 시작한다 (0≤k_i≤m0 \le k\_i \le m). 모든 k_ik\_i의 합은 200 000200\,000을 넘지 않는다.

이어서 이 천공 카드에 있는 문자들의 정보가 주어진다. 모든 정수 1≤j≤k_i1 \leq j \leq k\_i에 대해 k_ik\_i쌍의 a_i,ja\_{i,j}, c_i,jc\_{i,j} (1≤a_i,j≤m1 \le a\_{i,j} \le m, c_i,jc\_{i,j}는 영소문자)가 주어진다. 각 쌍은 a_i,ja\_{i,j}번 위치에 문자 c_i,jc\_{i,j}가 있음을 나타낸다. 나머지 위치에는 구멍이 있다. 한 천공 카드에서 문자가 있는 위치의 번호는 오름차순으로 주어진다. 즉, 임의의 1≤j<k_i1 \leq j < k\_i에 대해 a_i,j<a_i,j+1a\_{i,j} < a\_{i,j+1}이다.

출력

천공 카드를 원하는 방식으로 정렬하는 방법이 존재하면, nn개의 정수 p_1,p_2,…,p_np\_1, p\_2, \ldots, p\_n을 출력한다 (1≤p_i≤n1 \le p\_i \le n). 여기서 p_1p\_1은 가장 위쪽 천공 카드의 번호, p_2p\_2는 위에서 두 번째 천공 카드의 번호이며, 가장 아래에 놓이는 p_np\_n까지 같은 방식으로 이어진다. 가능한 답이 여러 개라면 그중 아무거나 출력해도 된다.

천공 카드를 원하는 방식으로 정렬할 수 없다면, 정수 −1-1 하나만 출력한다.

힌트

  • n≤100 000n \le 100\,000
  • m≤100 000m \le 100\,000

예제3

  1. 예제 1

    입력
    1 1
    a
    1 1 a
    
    예상 출력
    1
    
  2. 예제 2

    입력
    3 4
    glhf
    3 1 r 3 h 4 i
    3 1 r 2 l 3 o
    2 1 g 4 f
    
    예상 출력
    3 1 2
    
  3. 예제 3

    입력
    2 2
    aa
    2 1 a 2 b
    2 1 b 2 a
    
    예상 출력
    -1