노멀 교수 (Small2)

12개 구슬을 살아남은 이웃과 나누고 구슬이 부족한 칸이 탈락하는 M행 N열 격자 교환이 몇 번 이어지는지 셈합니다.

보통7시뮬레이션그래프수학아직 제출이 없습니다시간 제한5초메모리 제한512 MB

문제

노멀 교수의 세 아이가 학교에서 계속 말썽을 부려서, 교장이 퇴학시키겠다고 나섰다. 교장을 달래려고 교수는 전교생이 참여하는 놀이를 하나 준비했다.

놀이 이름은 "구슬을 잃지 마라"다. 아이들은 MMNN열 격자에 한 칸에 한 명씩 선다. 각 아이는 처음에 구슬을 얼마씩 받는다. 받는 개수는 아이마다 다를 수 있다.

놀이는 턴 단위로 진행된다. 한 턴에 각 아이는 구슬 12개를 자기 이웃에게 똑같이 나눠 준다. 이웃은 바로 앞, 뒤, 왼쪽, 오른쪽 칸에 선 아이다. 격자의 가장자리나 모서리에 선 아이는 이웃이 4명보다 적다.

턴이 시작될 때 구슬이 12개 미만인 아이는 구슬을 주고받기 전에 놀이에서 빠진다. 빠진 아이의 자리는 놀이가 끝날 때까지 비어 있고, 그 이웃은 주고받을 상대가 줄어든다. 이웃이 한 명도 없는 아이도 주고받을 상대가 없으므로 함께 빠진다. 이 제거는 더 빠질 아이가 없을 때까지 반복한다.

이 시점에 남은 아이가 없으면 놀이가 끝난다. 남은 아이가 있으면 모두 주고받을 상대가 있으므로 놀이는 계속된다.

아이들의 처음 배치와 각자가 가진 구슬 개수가 주어진다. 구슬을 주고받는 턴이 몇 번 일어나는지 구하라.

놀이는 다음 절차를 정확히 따른다.

number_of_exchanges = 0
repeat forever {
  while (구슬이 12개 미만이거나 이웃이 0명인 아이가 있다) {
    그런 아이를 모두 놀이에서 제외한다
  }
  if (놀이에 남은 아이가 없다) {
    놀이가 끝난다
  }
  simultaneously for each child in play {
    그 아이는 구슬 12개를 이웃에게 똑같이 나눠 준다
  }
  number_of_exchanges 를 1 늘린다
}

어떤 아이의 이웃이 kk명이면 그 아이는 각 이웃에게 구슬 12/k12/k개를 준다. kk는 1 이상 4 이하이므로 12/k12/k는 항상 정수다.

입력

첫째 줄에 테스트 케이스의 개수 TT가 주어진다. 이어서 TT개의 테스트 케이스가 주어진다. 각 테스트 케이스는 MM이 적힌 줄과 NN이 적힌 줄로 시작한다. 이어지는 MM개의 줄에는 그 행에 선 아이가 가진 구슬 개수가 공백으로 구분되어 NN개씩 주어진다.

제한

  • 1T1001 \le T \le 100
  • 1M401 \le M \le 40
  • 1N401 \le N \le 40
  • 각 아이가 처음 가진 구슬은 00개 이상 101210^{12}개 이하이다.

출력

각 테스트 케이스마다 한 줄에 Case #x: y turns를 출력한다. xx는 1부터 시작하는 테스트 케이스 번호이고, yy는 놀이가 끝날 때까지 일어난 구슬 교환 횟수다. 놀이가 영원히 끝나지 않으면 대신 Case #x: z children will play forever를 출력한다. zz는 운동장에 영원히 남아 놀이를 계속하는 아이의 수다. yy가 1일 때도 turns를 그대로 출력한다.