만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

체스판 만들기 (라지)

시간 제한5초메모리 제한512 MB

요약
남은 격자에서 체스판 무늬를 이루는 가장 큰 정사각형을 위쪽, 왼쪽 순으로 잘라내며 크기별 개수를 셉니다.
난이도

보통10점 중 7점

유형
동적 계획법, 시뮬레이션, 행렬
정답자
아직 제출이 없습니다

문제

체스판 산업이 어려운 시기를 맞아 도움이 필요하다. 체스판이 아주 희귀한 크로아티아 체스판 나무(Biggus Mobydiccus)의 껍질로 만들어진다는 사실은 잘 알려져 있지 않다. 이 나무의 껍질을 벗겨 펼치면 검은 칸과 흰 칸이 격자로 늘어선 커다란 직사각형 판이 된다.

당신이 할 일은 큰 정사각형 체스판을 최대한 많이 잘라내는 것이다. 여기서 체스판이란 껍질에서 잘라낸 정사각형 조각으로, 네 변이 껍질 직사각형의 변과 평행하고, 같은 색 칸 두 개가 절대 변을 맞대지 않도록 칠해져 있는 것을 말한다.

체스판을 하나 잘라낼 때마다 남아 있는 껍질에서 만들 수 있는 가장 큰 체스판을 골라야 한다. 그런 체스판이 여러 개면 가장 위쪽에 있는 것을 고르고, 그래도 여러 개면 가장 왼쪽에 있는 것을 고른다. 껍질이 하나도 남지 않을 때까지 이 과정을 반복한다. 1×1짜리 작은 체스판까지 잘라내야 하는 경우도 있다.

아래 그림은 체스판 나무의 껍질과 거기에서 가장 먼저 잘라내는 체스판 몇 개를 보여준다.

입력

첫 줄에 테스트 케이스의 개수 TT가 주어진다. 이어서 TT개의 테스트 케이스가 주어진다. 각 테스트 케이스의 첫 줄에는 껍질 격자의 크기 MM과 NN이 주어진다. NN은 항상 4의 배수이다. 다음 MM개의 줄에는 각각 N/4N/4글자짜리 16진수 정수가 주어지며, 이 정수를 2진수로 나타내면 격자 한 행에 해당하는 NN개의 비트가 된다. 0은 검은 칸, 1은 흰 칸이다. 행은 위에서 아래 순서로 주어진다. 각 행에서 16진수 정수의 최상위 비트가 그 행의 가장 왼쪽 칸에 대응한다.

제한

  • 1≤T≤1001 \le T \le 100
  • 1≤M≤5121 \le M \le 512
  • 1≤N≤5121 \le N \le 512이고 NN은 4의 배수이다.
  • 16진수 정수는 정확히 N/4N/4글자이다.
  • 문자는 0-9와 A-F만 쓰인다.
  • 입력 파일의 크기는 200kB 이하이다.

출력

각 테스트 케이스마다 "Case #x: KK" 형식의 줄을 하나 출력한다. x는 1부터 시작하는 테스트 케이스 번호이고, KK는 위 절차를 따라 잘라낸 체스판 크기의 가짓수이다. 이어지는 KK개의 줄에는 각각 정수 두 개를 출력한다. 체스판의 크기(큰 것부터 작은 것 순서)와 그 크기의 체스판을 잘라낸 개수이다.

힌트

첫 번째 예제 입력이 위 그림의 껍질에 해당한다.

예제2

  1. 예제 1

    입력
    4
    15 20
    55555
    FFAAA
    2AAD5
    D552A
    2AAD5
    D542A
    4AD4D
    B52B2
    52AAD
    AD552
    AA52D
    AAAAA
    5AA55
    A55AA
    5AA55
    4 4
    0
    0
    0
    0
    4 4
    3
    3
    C
    C
    4 4
    6
    9
    9
    6
    
    예상 출력
    Case #1: 5
    6 2
    4 3
    3 7
    2 15
    1 57
    Case #2: 1
    1 16
    Case #3: 2
    2 1
    1 12
    Case #4: 1
    2 4
    
  2. 예제 2

    입력
    6
    1 4
    0
    1 4
    5
    2 4
    5
    A
    8 8
    00
    00
    00
    00
    00
    00
    00
    00
    8 8
    55
    AA
    55
    AA
    55
    AA
    55
    AA
    4 4
    F
    F
    F
    F
    
    예상 출력
    Case #1: 1
    1 4
    Case #2: 1
    1 4
    Case #3: 1
    2 2
    Case #4: 1
    1 64
    Case #5: 1
    8 1
    Case #6: 1
    1 16