Palindromic Crossword
InterviewTime limit60sMemory limit1024 MB
Fill as many dots as possible in a crossword grid so that every maximal horizontal and vertical word is a palindrome, and report the count and final grid.
- Level
Medium6 of 10
- Topics
- Union-find, Simulation, Implementation, String matching
- Solved
- No attempts yet
Problem
A crossword puzzle is a rectangular grid of black cells and letters A-Z like the one shown below.

Words in the crossword are defined as maximal vertical or horizontal segments of characters. In the crossword below, DO and ON are examples of words.

A palindromic crossword is one where every word is a palindrome. Let Ri,j represent the character on the i-th row and j-th column, where i and j are 1-indexed. The top left corner is R1,1. In the example palindromic crossword below, the B in R3,2 is part of both the horizontal word starting at R3,1 and the vertical word ending at R4,2, and both are palindromes.

You have been gifted a palindromic crossword puzzle with N rows and M columns. You finished the crossword and throw away the clues, preparing to hang it on your wall. However, you accidentally erase some of the letters! You want to recover as much of the crossword as possible, but you do not have the clues anymore. Using only the knowledge that the crossword is palindromic, restore the maximum possible number of missing characters in the given crossword.
Missing letters are represented as empty white cells in the below diagram. The crossword on the left is the crossword you are given and the crossword on the right is the result after you recover as many letters as possible. The remaining cells cannot be filled because we do not have sufficient information to recover them.

Input
The first line of the input gives the number of test cases, T. T test cases follow.
The first line of each test case contains two integers, N and M, representing the number of rows and columns in the crossword, respectively.
The next N lines represent the N rows of the grid. The i-th row consists of M characters representing Ri,1, Ri,2, …, Ri,M. Each character is one of the following:
- A capital letter of the alphabet (
A-Z) - A period (
.) for a missing letter (empty white cell in the example crossword) - A hash (
#) for black cell
Output
For each test case, output one line containing Case #x: y where x is the test case number (starting from 1) and y is the number of empty white cells that were filled. Then, output N more lines representing the final grid, with the missing characters (.) replaced by capital letters (A-Z) where possible.
Limits
- 1 ≤ T ≤ 100.
- There exists at least one way to fill in the given input grid such that it is a palindromic crossword.
- All characters in the grid are in the set {
A-Z,#,.}
Hint
In Sample Case #2, we are able to fill in 8 of the blanks. We can fill in the missing letters as follows:
- row 1, column 4: We know this is
Afrom character at row 1, column 1. - row 2, column 4=
Afrom row 1, column 4. - row 2, column 6=
Afrom row 2, column 4. - row 3, column 6=
Afrom row 2, column 6. - row 3, column 2=
Bfrom row 3, column 1. - row 4, column 2=
Bfrom row 3, column 2. - row 4, column 3=
Bfrom row 4, column 2. - row 4, column 4=
Afrom row 4, column 11.