타일 깔기

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

요약
각 행에 타일 세트를 하나 골라, 행과 열이 함께 증가하는 a개 칸과 행은 증가하고 열은 감소하는 b개 칸이 모두 타일로 덮이도록 배치를 찾는다.
난이도

어려움10점 중 8점

유형
그리디, 동적 계획법, 투 포인터
정답자
아직 제출이 없습니다

문제

NN행 MM열 크기의 직사각형 바닥에 타일을 깔려고 한다. 초기에는 타일이 어디에도 깔려있지 않으며 각 행마다 TT개의 타일 세트 중 하나를 사용할 수 있다. ii번째 타일 세트는 k_ik\_i개의 수 x_i,1x\_{i,1}, x_i,2x\_{i,2}, ⋯\cdots, x_i,k_ix\_{i,k\_i}로 나타낼 수 있으며 이는 hh행에 ii번째 타일 세트를 사용한 경우 hh행 x_i,1x\_{i,1}, x_i,2x\_{i,2}, ⋯\cdots, x_i,k_ix\_{i,k\_i}열에 타일이 깔림을 나타낸다.

타일 세트의 목록이 주어질 때 다음 조건을 만족하는 a+ba+b개의 정수 순서쌍 (r_1,1,c_1,1)(r\_{1,1}, c\_{1,1}), (r_1,2,c_1,2)(r\_{1,2}, c\_{1,2}), ⋯\cdots, (r_1,a,c_1,a)(r\_{1,a}, c\_{1,a}), (r_2,1,c_2,1)(r\_{2,1}, c\_{2,1}), (r_2,2,c_2,2)(r\_{2,2}, c\_{2,2}), ⋯\cdots, (r_2,b,c_2,b)(r\_{2,b}, c\_{2,b})가 존재하도록 타일을 까는것이 가능한지 판별하고 가능하다면 그 방법을 하나 찾아보자.

  • r_1,1\<r_1,2<⋯\<r_1,ar\_{1,1}\<r\_{1,2}<\cdots\<r\_{1,a} 이며 c_1,1\<c_1,2<⋯\<c_1,ac\_{1,1}\<c\_{1,2}<\cdots\<c\_{1,a} 이고 1≤i≤a1 \leq i \leq a인 모든 ii에 대해 r_1,ir\_{1,i}행 c_1,ic\_{1,i}열에 타일이 깔려있다.
  • r_2,1\<r_2,2<⋯\<r_2,br\_{2,1}\<r\_{2,2}<\cdots\<r\_{2,b} 이며 c_2,1>c_2,2>⋯>c_2,bc\_{2,1}>c\_{2,2}>\cdots>c\_{2,b} 이고 1≤i≤b1 \leq i \leq b인 모든 ii에 대해 r_2,ir\_{2,i}행 c_2,ic\_{2,i}열에 타일이 깔려있다.

입력

첫 번째 줄에 NN, MM, TT, aa, bb가 공백으로 구분되어 주어진다. (1≤N,M,T≤5000;1≤a,b≤min⁡(N,M))(1\leq N,M,T \leq 5000; 1\leq a,b \leq \min(N,M))

다음 TT개의 줄에 걸쳐 타일 세트에 대한 정보가 주어진다. i+1i+1번째 줄에는 ii번째 타일 세트가 채우는 열의 개수 k_ik\_i와 k_ik\_i개의 열 인덱스 x_i,1x\_{i,1}, x_i,2x\_{i,2}, ⋯\cdots, x_i,k_ix\_{i,k\_i}가 공백으로 구분되어 주어진다. (1≤∑k_i≤5000;1≤x_i,j≤M;x_i,j_1≠x_i,j_2)(1\leq \sum k\_i \leq 5000; 1\leq x\_{i,j} \leq M; x\_{i,j\_1} \neq x\_{i,j\_2})

각 열은 최소 하나의 타일 세트에 포함된다. 즉, 1≤k≤M1\leq k \leq M인 모든 정수 kk에 대해 x_i,j=kx\_{i,j}=k를 만족하는 i,ji,j가 존재한다.

출력

조건을 만족하도록 타일을 까는것이 불가능하다면 No를 출력한다.

그렇지 않다면 Yes를 출력하고 다음 줄에 사용한 타일 세트의 번호를 나타내는 NN개의 정수 p_1p\_1, p_2p\_2, ⋯\cdots, p_Np\_N을 공백으로 구분해 출력한다. 이는 ii번째 행에 p_ip\_i번째 타일 세트를 사용했음을 나타낸다. (1≤p_i≤T)(1 \leq p\_i \leq T)

예제1

  1. 예제 1

    입력
    4 5 2 3 4
    3 1 4 5
    3 2 3 5
    
    예상 출력
    Yes
    1 1 2 1