뒤섞인 스택
시간 제한1초메모리 제한1024 MB
용량이 정해진 스택 사이에서 맨 위 카드만 옮겨, 카드 1부터 n까지를 아래에서 위로 정렬하고 앞쪽 스택부터 채우는 이동 순서를 출력합니다.
문제
장의 카드에는 1부터 까지 번호가 붙어 있고, 이 카드들은 개의 스택 에 나뉘어 놓여 있다. 각 스택에는 용량 제한이 있다. 번째 스택 에는 최대 장까지 쌓을 수 있다. 카드를 다루는 방법은 스택의 맨 위 카드를 꺼내 다른 스택의 맨 위에 옮기는 것뿐이다. 이때 옮기는 스택의 용량을 넘을 수 없다.
이런 이동을 반복해서, 번호가 작은 쪽의 스택 몇 개(0개 이상)는 용량을 꽉 채우고, 그 다음 스택은 꽉 채우지 않으며(비어 있어도 된다), 그 뒤의 스택은 모두 비도록 카드를 재배치하려고 한다. 또한 을 맨 아래, 를 맨 위로 두고 모든 스택을 이어 쌓았을 때, 카드는 아래에서 위로 1부터 까지 작은 순서로 정렬되어 있어야 한다.
임이 보장된다.
, 인 경우를 보자. 용량은 , 이고, 초기 상태는 (아래에서 위 순서, 은 빈 칸), , 이다. 이때 원하는 최종 상태는 , , 이다.
입력
첫 줄에는 카드의 개수 과 스택의 개수 가 공백으로 구분되어 주어진다. 이어지는 개의 줄은 각 스택의 초기 상태를 나타낸다. 번째 줄은 에 대한 정보이며, 공백으로 구분된 개의 정수를 담고 있다. 첫 번째 정수는 의 용량 이고, 나머지는 에 있는 카드 번호를 아래에서 위 순서로 적은 것이다. 의 카드가 장보다 적으면(비어 있을 수도 있다) 줄의 마지막 몇 개 정수는 0이다.
출력
스택을 원하는 최종 상태로 만드는 이동 순서를 출력한다. 각 이동마다 카드를 꺼내는 스택의 번호와 카드를 옮길 스택의 번호를 공백으로 구분하여 한 줄에 출력한다. 스택 번호는 1부터 까지이며, 옮길 스택은 꺼낼 스택과 달라야 한다. 이동 횟수는 를 넘을 수 없다. 이동을 모두 출력한 뒤에는 "0 0"(따옴표는 제외)이라는 줄을 출력한다. 가능한 해가 여러 개라면 그중 어느 것을 출력해도 된다.
제한
힌트
이 문제는 앞의 문제 설명에서 든 예시이다. 샘플 출력은 스택을 원하는 최종 상태로 만드는 14번의 이동을 보여준다.