종이 자르기

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

요약
회전 없이 평행이동만으로 다섯 조각을 L x L 정사각형에 정확히 채울 수 있는지 판별하고, 가능하면 사전순으로 가장 작은 배치를, 불가능하면 gg를 출력하는 문제입니다.
난이도

보통10점 중 7점

유형
백트래킹, 비트 연산, 완전 탐색, 구현
정답자
아직 제출이 없습니다

문제

송유진은 L x L 크기의 정사각형 모눈종이를 가지고 있다. 이 모눈종이는 가로 L칸, 세로 L칸으로 나뉘며, 각 칸은 1 x 1 크기의 정사각형이다.

차영훈은 이 모눈종이를 격자선을 따라 잘라 정확히 5개의 조각으로 만들었다. 이제 송유진은 주어진 다섯 조각을 회전하지 않고 L x L 정사각형 안에 다시 배치해야 한다.

입력

첫째 줄에 정사각형 한 변의 길이 L이 주어진다. (3 <= L <= 10)

그다음에는 첫 번째 조각부터 다섯 번째 조각까지의 정보가 차례대로 주어진다.

각 조각의 정보는 다음 형식이다.

  • 첫째 줄에 조각의 세로 크기 N과 가로 크기 M이 주어진다. (1 <= N, M <= L)
  • 이어지는 N개의 줄에는 조각의 모양이 주어진다. 각 줄은 길이 M이며 #과 .으로만 이루어져 있다.
  • #은 조각이 차지하는 칸, .은 빈칸을 뜻한다.
  • 조각 정보의 첫 행, 마지막 행, 첫 열, 마지막 열에는 각각 적어도 하나의 #이 있다.

출력

다섯 조각을 회전하지 않고 L x L 정사각형에 겹치지 않게 배치하여 모든 칸을 채울 수 있다면, 각 칸을 차지한 조각의 번호를 출력한다. 조각 번호는 입력으로 주어진 순서대로 1부터 5까지이다.

출력은 L개의 줄로 이루어지며, 각 줄은 해당 행의 L개 칸에 적힌 번호를 나타낸다.

가능한 배치가 여러 가지라면, 모든 행을 위에서부터 차례대로 이어 붙여 만든 문자열이 사전순으로 가장 앞서는 배치를 출력한다.

조건을 만족하는 배치가 없으면 gg를 출력한다.

예제6

  1. 예제 1

    입력
    5
    1 5
    #####
    1 5
    #####
    1 5
    #####
    1 5
    #####
    1 5
    #####
    
    예상 출력
    11111
    22222
    33333
    44444
    55555
    
  2. 예제 2

    입력
    10
    2 2
    ##
    ##
    8 8
    ########
    #......#
    #......#
    #......#
    #......#
    #......#
    #......#
    ########
    6 6
    ######
    #....#
    #....#
    #....#
    #....#
    ######
    4 4
    ####
    #..#
    #..#
    ####
    10 10
    ##########
    #........#
    #........#
    #........#
    #........#
    #........#
    #........#
    #........#
    #........#
    ##########
    
    예상 출력
    5555555555
    5222222225
    5233333325
    5234444325
    5234114325
    5234114325
    5234444325
    5233333325
    5222222225
    5555555555
    
  3. 예제 3

    입력
    8
    3 6
    #.....
    ######
    ######
    3 4
    .###
    ####
    ####
    6 5
    ###..
    ###..
    ##...
    ####.
    #####
    .####
    5 2
    .#
    .#
    .#
    ##
    ##
    3 5
    ####.
    #####
    ..###
    
    예상 출력
    gg
    
  4. 예제 4

    입력
    5
    1 5
    #####
    1 5
    #####
    2 5
    #####
    #####
    1 5
    #####
    1 5
    #####
    
    예상 출력
    gg
    
  5. 예제 5

    입력
    6
    2 2
    ##
    .#
    4 2
    .#
    ##
    ##
    ##
    4 3
    ##.
    ###
    ###
    ##.
    4 6
    ...#..
    ..##..
    ######
    ######
    1 1
    #
    
    예상 출력
    331152
    333122
    333422
    334422
    444444
    444444
    
  6. 예제 6

    입력
    8
    3 7
    ##.....
    .#####.
    ....###
    7 5
    #....
    ####.
    ####.
    ####.
    #####
    ..###
    ..###
    8 4
    .###
    ..##
    ...#
    ####
    ####
    .###
    .###
    .###
    2 2
    ##
    ##
    1 3
    ###
    
    예상 출력
    11555333
    21111133
    22221113
    22223333
    22223333
    22222333
    44222333
    44222333