던전 2
시간 제한1초메모리 제한256 MB
이동과 색 관찰만 가능한 탐색 라이브러리로 알 수 없는 연결 그래프를 알아내고, 거리가 정확히 i인 방 쌍의 수를 각 i마다 답한다.
문제
당신은 Just Ordinary Inventions 사를 아는가? 이 회사의 업무는 "그저 평범한 발명(just ordinary inventions)"을 하는 것이다.
JOI 군은 Just Ordinary Inventions 사에서 개발한 최신 게임을 하고 있다.
이 게임은 여러 개의 방과 여러 개의 길로 이루어진 던전을 탐험하는 게임이다. 길은 던전 안의 서로 다른 두 방을 연결하며, 양방향으로 이동할 수 있다. 서로 다른 두 방을 연결하는 길은 많아야 1개이고, 양 끝이 같은 방인 길은 존재하지 않는다. 또한 던전의 어떤 두 방 사이도 몇 개의 길을 사용해 서로 이동할 수 있다는 것이 알려져 있다. 각 방은 서로 매우 비슷해서, 같은 수의 길이 나 있는 방끼리는 방의 모습만 보고는 전혀 구별할 수 없다.
이 게임에서는 공략을 돕기 위해 각 방에 표식과 받침대가 준비되어 있다. 방에서 나가는 길은 표식을 기준으로 1번째, 2번째, ... 와 같이 셀 수 있다. 게임 중에 던전의 구조가 변하지 않는다. 따라서 같은 방에서 같은 번호의 길을 사용해 이동하면 언제나 같은 방에 도착한다. 받침대에는 플레이어가 색을 바꿀 수 있는 보석이 1개 장식되어 있다. 보석의 색은 색 1, 색 2, ..., 색 X 중 하나이며, 게임 시작 시 각 방의 보석 색은 색 1이다. 보석의 색은 플레이어가 조작하지 않는 한 변하지 않는다.
JOI 군은 이 던전의 구조, 즉 던전의 방끼리 어떤 길로 연결되어 있는지를 알 수 있다면 이 게임을 쉽게 공략할 수 있다는 것을 깨달았다. 그러나 JOI 군이 여러 가지로 시도해도 던전의 구조를 결정할 수 없었다. 그래서 당신은 JOI 군을 대신해 던전의 구조를 결정하는 프로그램을 작성하기로 했다.
던전을 탐험해서 던전의 구조를 결정하는 프로그램을 작성하라. 그러나 JOI 군은 던전의 구조를 완전히 밝히는 것을 원하지 않았기 때문에, 프로그램은 던전의 구조를 직접 답하는 대신 1 이상 R 이하의 각 정수 i에 대해 "최소로 정확히 i개의 길을 사용해 이동할 수 있는 두 방의 쌍은 몇 개인가"의 값(방의 순서를 바꾼 것은 같은 쌍으로 본다)을 답해야 한다.
던전을 탐험하기 위해, 당신에게는 다음 행동을 하기 위한 라이브러리가 제공된다.
- 현재 있는 방에서 몇 개의 길이 나 있는지 안다.
- 현재 있는 방의 받침대에 장식된 보석의 색을 안다.
- 현재 있는 방의 받침대에 장식된 보석의 색을 지정한 색으로 한다(현재 색과 같은 색을 지정할 수도 있다). 그 후 방에서 나가는 길을 1개 골라 그 길을 사용해 다른 방으로 이동한다.
- 마지막으로 사용한 길이 현재 있는 방에서 나가는 길 중 몇 번째인지 안다.
입력
채점 프로그램의 샘플은 표준 입력에서 다음 데이터를 읽는다.
- 1번째 줄에는 정수 N, X, R이 공백을 구분으로 쓰여 있다. 이는 던전에 방 1, 방 2, ..., 방 N의 N개 방이 있고, 보석의 색이 X종류 있고, 프로그램이 답해야 할 값이 R개임을 나타낸다.
- 이어지는 2N개 줄 중 2i - 1번째 줄(1 ≤ i ≤ N)에는 정수 Di가 쓰여 있으며, 방 i에서 Di개의 길이 나 있음을 나타낸다. 2i번째 줄(1 ≤ i ≤ N)에는 Di개의 정수 Ti1, Ti2, ..., TiDi가 공백을 구분으로 쓰여 있다. 이는 방 i에서 나가는 j(1 ≤ j ≤ Di)번째 길을 사용해 이동하면 방 Tij에 도착함을 나타낸다.
- 이어지는 R개 줄 중 j번째 줄(1 ≤ j ≤ R)에는 정수 Aj가 쓰여 있다. 이는 최소로 정확히 j개의 길을 사용해 이동할 수 있는 두 방의 쌍이 Aj개 있음을 나타낸다. 즉, 각 j(1 ≤ j ≤ R)에 대해
Answer의 인자D로 j, 인자A로 Aj를 주고 호출했을 때 채점 프로그램의 샘플이 정답으로 판정하고, 그 외의 경우에는 오답으로 판정함을 나타낸다.
채점 프로그램의 샘플은 플레이어의 초기 위치를 방 1로 해서 당신이 작성한 루틴을 호출한다.
출력
프로그램의 실행이 정상적으로 종료되면, 채점 프로그램의 샘플은 표준 출력으로 다음 정보를 1줄에 출력한다(따옴표는 실제로 출력되지 않는다).
- 정답인 경우, 함수 Move를 호출한 횟수가 "
Accepted : #move = 8"처럼 출력된다. - 오답인 경우, 오답의 종류가 "
Wrong Answer [1]"처럼 출력된다.
제한
아래에서 입력 데이터에서의 던전의 방의 수를 N, 길의 개수를 M이라고 한다.
- 2 ≤ N ≤ 200.
- 3 ≤ X ≤ 100.
- 1 ≤ R ≤ 200.
- 1 ≤ Di ≤ N - 1 (1 ≤ i ≤ N).
- 1 ≤ Tij ≤ N이고 Tij ≠ i (1 ≤ i ≤ N, 1 ≤ j ≤ Di).
- Ti1, Ti2, ..., TiDi(1 ≤ i ≤ N)는 서로 다르다.
- 각 i, j(1 ≤ i ≤ N, 1 ≤ j ≤ Di)에 대해 TTijk = i를 만족하는 k(1 ≤ k ≤ DTij)가 존재한다.
- 어떤 두 방 사이도 몇 개의 길을 사용해 서로 이동할 수 있다.