폴리오미노란 크기가 1×1인 정사각형을 둘 이상 이어서 붙인 평면도형이며, 다음과 같은 조건을 만족해야 한다.
펜토미노는 정사각형 5개를 이어 붙인 폴리오미노를 의미한다. 펜토미노는 다음과 같이 F, I, L, N, P, T, U, V, W, X, Y, Z 모양으로 12가지가 있다.
F I L N P T U V W X Y Z
몽이는 크기가 N×M인 직사각형 모양 보드 위에 12가지 펜토미노를 한 개씩 전부 놓으려고 한다. 보드는 크기가 1×1인 정사각형 칸으로 나뉘어 있으며, 각각의 칸에는 0 또는 1이 쓰여 있다. 0이 쓰인 칸은 60개가 있다.
펜토미노를 놓을 땐 펜토미노의 각 정사각형이 반드시 보드의 한 칸을 정확하게 포함해야 하며, 펜토미노는 서로 겹칠 수 없다. 이때, 펜토미노는 0이 적힌 칸 위에만 놓을 수 있으며, 1이 적힌 칸은 펜토미노가 덮을 수 없다. 또한, 각 펜토미노는 회전하거나 뒤집어서 보드에 올려놓을 수 있다.
위 조건을 만족하며 펜토미노 12개를 놓아 0이 적힌 모든 칸을 덮는 한 가지 경우를 출력하는 프로그램을 작성하시오.
첫째 줄에 보드의 세로 크기 N과 가로 크기 M이 주어진다. (3≤N, M≤100)
둘째 줄부터 N개의 줄에 걸쳐 보드에 쓰여 있는 숫자 0 또는 1이 공백으로 구분되어 주어진다. i번째 줄의 j번째 숫자는 위에서부터 i번째 칸, 왼쪽에서부터 j번째 칸에 쓰여 있는 숫자이다.
12가지 펜토미노를 겹치지 않게 한 개씩 놓아 0이 쓰여 있는 칸을 모두 펜토미노로 덮을 수 있는 경우의 입력만 주어진다.
첫째 줄부터 N개의 줄에 걸쳐 보드의 상태를 공백으로 구분하여 출력한다.
i번째 줄의 j번째 값은 위에서부터 i번째 칸, 왼쪽에서부터 j번째 칸의 상태이다. i번째 줄의 j번째 칸에는 펜토미노를 놓았다면 펜토미노의 종류를 나타내는 알파벳(F, I, L, N, P, T, U, V, W, X, Y, Z)을 출력하고, 펜토미노를 놓을 수 없는 칸이면 1을 출력한다.
만족하는 경우가 여러 가지라면 그중 아무거나 하나를 출력한다.