Problem Statement
Howard Benson loves puzzles and is always eager to invent new ones. He has recently invented a new puzzle based on the old puzzles that involved placing various tetrominoes inside a rectangle. For this puzzle, Howard picked four kinds of tetrominoes and made pieces with their shapes. The player can use as many pieces of each kind as necessary. The pieces he made available are shown in the following image:

Another component of the puzzle is the board, which is a square grid composed of white and black cells. The objective of the game is to cover all the white cells by placing a minimum number of pieces on the board. There are many rules regarding the placement of the pieces:
- The pieces may not overlap.
- Every piece must lie completely inside the board.
- The pieces must be aligned to the grid.
- The orientation of each piece must be the same as the orientation in the picture above.
- Black cells in the board may be covered if necessary.
For example, the following picture shows a board configuration and a solution using a minimum number of pieces:

You are given the board as a
Definition
- Class:
- BrickPuzzle
- Method:
- leastShapes
- Parameters:
- String[]
- Returns:
- int
- Method signature:
- int leastShapes(String[] board)
- (be sure your method is public)
Constraints
- board will contain between 1 and 22 elements, inclusive.
- Each element of board will contain between 1 and 22 characters, inclusive.
- All elements of board will contain the same number of characters.
- Each element of board will contain only the characters '.' and uppercase 'X'.
Examples
{"..X....", "..XXXXX"}
Returns: 2
{".X", "..", "X."}
Returns: -1
Note that the pieces cannot be rotated.
{"..XX....", "....X..X", "XX..XXXX"}
Returns: 4
{"X..XXXX", "X.....X", "....XX.", "X......"}
Returns: 5
This is the example from the statement.
{"......................", "......................", "......................", "......................", "......................", "......................", "......................", "......................", "......................", "......................", "......................", "......................", "......................", "......................", "......................", "......................", "......................", "......................", "......................", "......................", "......................", "......................"}
Returns: 121
{"X.",".X","X."}
Returns: -1
{".","X",".",".",".","X",".",".","X",".",".",".","X","X"}
Returns: -1
{"XXXXXXXXX","XXXXXXXXX","XXXXX.XXX","XXXXXXXXX","XXXXXXXXX","XXXXXXXXX","XXXXXXXXX"}
Returns: 1
{"XXXXXX..XXXX.XX.X","XX.XXXX.XXXXX..X.",".X.XXX.XX.X.X.XXX"}
Returns: 7
{"X..X.X..XX","X.X.XXX..X","..X...XXXX","X.XXX.XXXX","X...X...X.","XX..X.XX.X","X....X.X.X","XXX....XX.","X...XX...."}
Returns: 15
{".........X","..X.X.....",".X.X......",".........X","..........","...X......","..........","....X.....","..........","...X......","..........",".........."}
Returns: 30
{"XXXXXXXXXXXXXXXXXXXX","XXXXXXXXXXXXXXXXXXXX","XXXXXXXXXXXXXXXXXXXX","XXXXXXXXXXXXXXXXXXXX","XX.XXXXXXX.XXXXXXXXX","XXXX.XXXXXXXXXXXXXXX","XXXXXXXXXXXXXXXXXXXX","XXXXXXXXXXXXXXXXXXXX","XXXXXXXXXXXX.XXXXXXX","XXXXXXXXXXXXXXXXXXXX","XXXXXXXXXXXXXXXXXXXX","XXXXXXXXXXXXXXXXXXXX","XXXXXXXXXXXXXXXXXXXX","XX.XXXXXXXXXXXXX.XXX","XXXXXXXXXXXXXXXXXXXX"}
Returns: 5
{"XXXXXX.XX.","XXXXXXXXX.","XXXX.XXXXX","XXXXXXXXX.","XXXXXXXXXX",".XXXXXXXXX","XXXXXXXXXX","XXXXXXXXXX","XX.X.XX.XX","XXXXXXXXXX",".XXXX.XXXX","X.XXXXXXXX","XXXXXXXXXX",".XXXXXXXXX","XXXXXXXXXX","XXXXXXXX.X","XXX...XXXX"}
Returns: 12
{"XX.XX.XXX.X.XX","XXXXXXXXX.XXXX","XXXX..XX.XX.X.","XXX.X.XX.XXXXX",".X.XXX.XXXX.XX"}
Returns: 9
{"XXX......X","..XX...XXX",".X..X...X.","XXX.X.X.XX","X.X.X.X.XX","XXXX...XX.","XX.XX..XX."}
Returns: 12
{"...X.X.XXX.","X....XXXXX.",".X.....XX.X","..X.XXX..XX",".XXX..X.X..","X.XX.X..XX.",".X.X.XXX.XX","..XX.XX..XX",".....X..XX.","XXXX.XX.X..",".XXXXX.XX..","...XX.....X",".XXX.X.X.XX","XXX..X..X..","X.XX.XXX...","...X......X",".XX...XXXXX"}
Returns: 34
{"..XXX..",".XX.XXX","X..XXX.",".XXXXXX","X.X.X.X",".XXX.XX"}
Returns: 8
{"XX","XX","..","X.","XX","X.","..","X.","XX","XX","XX","XX","XX","XX",".X","XX"}
Returns: 4
{"X","X","X",".","X","X","X","X","X","X","X","X","X","X","X","X","X","X","X","X"}
Returns: -1
{"XXXXXX.X","XXXXXX.X","XXXXXXXX","X.XXXXXX","XXXXXXXX","XXXXXXXX","XXXXXXX.","XXXXX.X.","XXXXXXXX","XXXXXXXX"}
Returns: 4
{".......X.XX."}
Returns: 3
{"X..X..XX....."}
Returns: 3
{"...XX.XX........","X..XX....XX.XXX.",".X.X...X.X.XXXXX","XX........XXX...","...XXXX.XX..X...","..X.X.X.XX.XX...","X.XXXX.X.X..X...",".X.XXX..XX.XX.X.","..XX..X.X.....X.","XXX.X..X.XX.X.X.",".X....XX....XXX.",".X.XX..X...X....","XX....X.XX.....X","..XX.X...XX.....","X......XXXXXX...","....X.X..X.X.X..","......XXX.XX...X",".XXX...XX..X...X","X...X....XX..XX.","XX..X.XXXXXX...X"}
Returns: 61
{"XXXXXXXXXXXXXXXX","..XXX.XXX.XXXX.X","X.XXX.XXXXX.XXX.",".X.XXX..XXXXX.XX","XXX.XX...XX.XXXX","X.X.X..XXXX.XXX.","X.XX....XXXXXXXX","XX.XXXXXX...X.XX","XXXXXXXXXXXXX.X.",".XX.X.XXXX.X.X.X",".XX.XXXXXXX.XXXX","XX.XXXXX..XXXXXX",".XXX.XXXX..XXXX.","XXXX.XXX.XX.X.X."}
Returns: 28
{".XXXX.X..X.X..","XX.XX..XX..X.X","X.XX.X.X.XX..X","X.XXXXXXXXXXXX"}
Returns: 8
{"X...........","............","............",".........X..","X...........","............","....X.......",".X..........",".......X....",".....X......","............",".....X.....X",".....X..X..."}
Returns: 39
{"XX...XXXXXX","XXXXX.XX.XX","XXX......XX",".XX.X..X..X","X..X..XX...","XX...XXXX.X","XXX...XXXXX","...XX.XXX.X","X.X.XX..XXX","X.X.X.XXXX.",".X.X.XXXXX.",".X.X..X..X.",".XX.XX..X..","XXXX.XXXX.X","XXX..X..X.X","XX.XXX.XX.."}
Returns: 27
{"..X.....XX."}
Returns: -1
{"XX.X","XXXX","X.XX","XXXX","XXXX","XXXX","XXXX",".X.X","XXXX","X.XX","XXXX","X.XX","XX.X","XXXX","XXXX","XXXX","XXX.","XXXX"}
Returns: 6
{"X.XXXXXXXX","XXXXXXXXXX",".XXX.XXXXX","XXXXXXXXXX","X.XXXXXXXX","XXXXXXXXXX","XXXXXXXXX.","XXXXXXXXXX","XXXXX.XXXX","XXXXXXXXXX","XXXXXXXXXX","XXXXXXXXX.","XXXXXXXXX.","XXXXXXX.XX","XXXXXXXXXX","XX.XXXX.XX","XXXXX.XXXX"}
Returns: 10
{"...............","...............",".......X.......","...............",".............X.","...........X...","...............","...............","X..............",".........X.....","..........X....","...............","........X......"}
Returns: -1
{"..XX..X....X..","...XXX....X.X.","...X...X..XX..","..X..XXX..XX.X",".XXX.XX.X..XXX","....XXXX.XXX..","X.XX.XX....XX.","X.XX.XXX..XX..","..X.XXX....X.X",".X.XXX.....X.X",".X....X..X.X..","..X.X.X.X..XXX",".XXX...X.X...X"}
Returns: 34
{"....X..","..XXXX.","X......"}
Returns: 4
{".X.XX..XX",".XX.XXXXX",".XX.XXXXX","XXXXX.XXX","XXX..XXX.",".XXX.XXX.",".X.XX..XX",".XXX.XXXX","XXX.XXX.X","XXXXXXXX.",".XXXXXX.X"}
Returns: 14
{".",".",".",".",".",".",".",".","X",".","X",".","X","X","X","X",".","X","X",".",".","."}
Returns: -1
{"X",".","X","X"}
Returns: -1
{"...X.XXXXXX",".XXXX.XXXXX","XX...XXX.X.","XXXX.XXX...","X.XXXX.X.X.",".X.XXXXXX.X",".X.X..XXXXX",".X...XX..X.","X.XXX.XXX.X","XXXXX.X.XX."}
Returns: 17
{"X..XXXXX.X.X.X...XXX",".X.XX.XXXXXXXXXXX.XX"}
Returns: 5
{".XX","...","..X","X..",".X.","X..","..X"}
Returns: -1
{".X..","X..X"}
Returns: 2
{".X","XX","XX","XX","XX","XX","XX",".X","XX","XX","XX","XX","XX","XX","XX","XX"}
Returns: 2
{"...XX..XX......","X..X...X....X.X","...X..X....X.XX","......X..X.....","X..X...XXXXXX..","X.X...X.XX.....",".XX....X.X.....","XX..X...X.....X","..X..X......X..",".X...XX.X...X..","...X.X.........","...........XX..","X......X......X","....X.X..X.....",".X.XX.....X...."}
Returns: -1
{"....X......X.","...XX.X.X...X","....XX...X...","XX.....X.....",".X...X.....X.","...X......X.X","...X....X...."}
Returns: -1
{".XX.XX.","XXX.XX.",".XX.XXX",".X.X...",".XXX...",".......",".XX....",".......","XXX...X"}
Returns: -1
{"XX......X.....X..X.","XX..XX.XX.X.X.X....",".XX..XXX...X.X.X...","..X.X.X.XXXXX.....X","..XXXXX......XX...X",".X.....X..X..X.X..X","..X.XX.X...XX.XX...","X..XXX.X..X.X..XX..","..X........XXXX...X","XXX.XX.....XXX...XX","XX.X.X.X.X.X....XX.",".XXXXXX..XXX.X.X...","X..XXXX.X.XXX.....X","X..XXXXXX..X..X.XXX","...X.XX.XX...X.X...","...XXX....X.....X.."}
Returns: 56
{".XXXX.X.XXX..X.XX.","X...XX.XXX...X.XXX","XX.XX.XXXXXXXXXX.X","XX..XXXXXX.X.XX...","XX.....XXXXXXXXX..","X.X.XX.XX..XXXXXXX","..XXXX.XXX..X.X...","XXXX....X...XX..X.","X..XX...XXXXXXXXXX","XX.XX.XXX.XXXX..XX","X..XXXXX...X.XX.X.","XXXXX.XX.XXXXX...X",".X..X.XXXX..XX..X.","..X.XXX....X.X.X.X","XX.XXX..XX..XXX..X","XX.X.X.XXXX..XX.X.","..XX.X.XXX..X.X.X.",".X..XXXXXXXXX..XX.",".X.XXXX.XX....XXXX"}
Returns: 50
{"XXX....X.XXX.","X.X...X..X.X."}
Returns: 5
{"...X..X.","....X...","X....X.X","....XXX.",".XX....X","X..X...."}
Returns: 10
{".X..X.......","X.X..X..X..X","X...X.XX.X..","XXX....X....",".........X..",".X.XXX...X.X"}
Returns: 15
{"XXXXXXXXX",".XXXXX.XX","XXX.XXX.X","XXXXX.XXX","XX.XXXXXX","X.XXX.X.X","XXXXXXXXX","XX.XXXXXX","XXXX.XXXX","XX.XXXXXX","XXXXXX.XX","XXXXXXXXX","XXXX.XXXX","XXX..XXX."}
Returns: 10
{"..................","..................",".......X..........","...............X.X",".................."}
Returns: -1
{"....XX..XXX..X.X.X.X.","X....XX.X..X..XXX.X.X","....X.X.......X.XX...",".XXX..XXXX........X..","..X.X...XXX.X.X.XX...",".X....X.XX...XXX.XXX.","XX..X.X..XX...X..X...","..X..XXX....XX..XX...","X.XXX........XXXX....","X.XXX.....XXX....X..X","XX.XX...X...XXXXX..XX","XXX.X..X.XXX...X.X.XX","XXXX.X..XXX.X....X.XX","..X......X....XX.XXX.",".X...XX...X.XXXX.XXXX","...XXX...X.....X.XX.X","...X.X.XXXXX.........","..X..X....X....XX.X..","X..X...XXXX...XXX...X","X....XX.XX...XXXXXX.X","XX....X.XXX.XXXX.XX.X","..XX.X.XXXXX.XXXX.X.."}
Returns: 82
{".....",".....","X....",".X...","XX...","....."}
Returns: -1
{"X.XXXXXXX.XXXXXXXXXXX","..X.XXX.XXXXX.XXX.XXX","XXXXXXXXXXXXXXXXXXXXX","X..XXXXXXXX.X.XXXXXXX",".XXXX.XXXX.XXXXX.X.X.","XX.XXXX.XX.XXX...XX..","X.XXX.XXX.XXXXX.XXXXX",".XXXXX.XXXXXXX.X.XXXX","XXXXXX.XXX..XXXX.XXXX"}
Returns: 20
{"XXXXXXXXXX.XXX","XXXXXXXXXXXXXX","XXXXXXXXXXXXXX","XXXXXXXXXXXXX.","XXXXXXXXXXXXXX","XXXXXXXXXXXXXX","XXXXXXXXXXXXXX"}
Returns: 2
{".XX...X.",".X..XXXX","X.X.XXX.","X.XX.X..","XXXXX...","XX.XX..X","..XX..X.","XX..X..X","X.XXX.XX","XXX.XXXX","XXXX.XXX","XXXXXXX.","XXX.X..X",".XXX...X",".X.X.XXX",".XXX.X.."}
Returns: 20
{"...X...........X.X.","..X.....XX.........","...................","............X......",".XX.........X......",".......X........X..","......XX.X....X....",".........X.....X...","X..................","........X..........",".....X.............","X.....X......X.....","................X..","........X...X......",".X..X.........X....","..X.......X........"}
Returns: -1
{".X..","....","X..X","XXXX","X.XX","X..X","...X",".X.X","..X.","..XX","XXXX","...."}
Returns: 9
{"............","X.X.X....X..","XX...X..XX..","............",".X.........."}
Returns: 14
{"..X"}
Returns: -1
{"X....X...XX..X..","...XX.......X...","..........X.X...","....X...X..X....","..XX..........X.",".....X..X...X...","XXX.XX.X.......X",".........X...X.."}
Returns: 29
{"X..X..X..XXXXX","XX.XX.....XX..","XXXXXX..X..XXX","XXX..X.XX.....","X.XXXXXXXXX...",".XXXXXXX.XXXX.",".XXX..X.XXX..X","XXX.XXXX.XXXXX","XX.X..XX..XXXX","XXXXXX.X.X.XXX","XX.X..X.XX..X.","XXXXXXX.XXX.X.",".XX..XXXX.X.XX","X.XX...XXX.X.X"}
Returns: 27
{"X...XX.XX",".XX..X..X","......XX.","X..XXX..X","X.XX.X...",".XX......","XX.XX....","X.X...X..",".XXXX..X.",".......X.","...XXX.XX",".........","...XX.XX.",".........","X...XXX..","..X....X."}
Returns: -1
{"X.X.","X...",".X..","XXXX","..X.","....",".X..","XX..","....",".X..",".X..",".X.X",".X..","...."}
Returns: 13
{"XXXXXXXXXXXXXX","XXXXXXXXXXXXXX","XXXXXXXXXXX.XX","XXXXXXXXXXXXXX","XXXXXXXX.XXXXX","XXX.XXXXXXXXXX","XXXXXXXXXXXXXX","XXXXXXXXXXXXXX","XXXXXXXXXXXXXX","..XXXXXXXXXXXX","X.XXX.XXXXXXXX","XXXXXXXXXXXXXX","XXX.XXXXXXXXXX","XXXXXXXXXXXXXX","XXXXXXXXXX.XXX","XXXXXXXXXXXXXX","XXXXXXXXXXXXXX","XXXXXXXXXXXXXX","XXXXXXXXXXXXXX","XXXXXXXX.XXXXX","XXXXXXXXXXXXXX"}
Returns: 8
{"...........X..........","...X..................","...X......X......X....","........X...X........X"}
Returns: 21
{"..X.X..XX."}
Returns: -1
{"..X........X...","....X.....X..X.","...X...X.......","...............","..........X....","X..............",".......X......X","......X........",".X.............","....X......X...","...............",".....X..X......","...........X...","......X...X.X..","....X..........","........X......","...............","............X..","...........X...","...X.X........."}
Returns: -1
{"X.X..X.","XXX.X.X","XX.XX.X","X.XXXXX","..X.X..","..XX...","XXXX..X","XX.XXXX","X.X..XX","XXXXX..",".XX.XX.","X...XXX","X.X..X.","XXXXX.X","X.XXX.X"}
Returns: 17
{"XX..X.XX....",".....XXXX.X.","...XXX.X..X.",".X..X.......","XXX.X....X.X","XX.XX.X.....","......X...XX"}
Returns: 17
{"......"}
Returns: -1
{"XX","XX","XX","XX","XX","XX","XX","XX",".X","X.","XX","XX","XX"}
Returns: 1
{"....X...","........","........","........","........","........","........",".......X","....X...","........","......X.","........","........",".....X..",".X......","...X....","........"}
Returns: 34
{".X..","XXXX","XXXX","X.XX"}
Returns: 2
{"............","............","...X........","............","...X.......X","............",".X..........","............",".........X..","X...........","............","..X....X..X.",".......X...."}
Returns: 39
{"X.X.XX.XXXX.","X.X.X.XXXXX.","X.XXXXXXXX..","XXXXX.XXX.XX","X.X.XXXXXXXX","XXXX..X.X.XX"}
Returns: 10
{"..",".X","..","X.","..","..","..","XX",".X",".X","..",".X","XX","..","..","..","..","..","XX","..","X.","X."}
Returns: 11
{"....X...XXX.X..",".....X.X......X",".............X.","......X.....X.X","X.X....X....X..",".........X.X...","..X.X....XX.X.X","X.......X..XX..","...............","..............X","..........XX...",".X......X.X....","........X..XX..","..XXX.X......XX","XX......XX.....","..X...X..X.X.X.",".X......X......","....X..XX..X...","......XX.X.X...","....X.X......X.",".......X.X....."}
Returns: -1
{"...X..X.X....X......","....X.......XX.....X","..............X..X..","........X.......X..X",".XX...X.X...X.....X.","X.X.........X.......","..X...........X...X.","XX....X....X...X....","........X.X.........","...X..........X.X.X.","..X.X.X.............",".....X.X......X...X.","XXX.................","X..........XXX......",".X...X...X........X.","...X...X..X.......X.","X...X...X...X.......","X.....X.....X.....X.",".................X..","....X...X....X.X..X.","........X......X...X"}
Returns: 100
{".XXX...XX.....X..X",".......X.X.X.X.X.X",".XXX.XX..X.X..X...","..XX....XXXXX.X..."}
Returns: 15
{".....X.XX.X...XXX",".XXX.X.XXX...X...","XX.X.XX.XX......X","XX.....XX.XX..X..","..X..X....XXXX.XX",".....X...X.X...XX",".X...XX.....XX.X.",".X..X.....XX.XX.."}
Returns: 27
{"XX.XXXX","XXXXX.X","XXX...X"}
Returns: 3
{"XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX","XXXX"}
Returns: 0
{"XX.....X","XX....X.","X....XX.","X..X.X..","....XX..",".......X",".XXX....","....XXX.","..XX.XXX","XX.XXX.X",".XX.X..X","XX......","........","X......X","XX......","XX.....X","..XX...X",".XXXXXX.","XXXX...X","X.XX.X.."}
Returns: 30
{".","X",".","X",".","X",".",".",".","X","X","X",".",".","X",".","."}
Returns: -1
{"XXXXXXXXXXXX.XXXXXXXXX","XX.XXXXXXXXXXXXXXXXXXX","XXXXXXXXXXXXXXXXXXX.XX","XXXXXXXXXXXXXXXXXXXXXX","X.XXXXXXXXXXXXXXXXXXXX","XXX.XX.XXXXXXXXXXXXXXX","XXXXXXXXXXXXXXXXXXXXXX"}
Returns: 5
{".........",".........","........."}
Returns: -1
{"..","X.","..","X.","X.",".X","..","XX","..",".X",".X","..",".X","..","X."}
Returns: -1
{"X.."}
Returns: -1
{".","X",".",".",".",".",".",".",".",".",".",".",".","X","."}
Returns: -1
{"XX.XXX.X","XXXXXX..","..XXXXX.","..X..X..","...X.XXX","X..XXX..","X...XXX.",".....XXX","X..X..X."}
Returns: 12
{"X...XX..XX","X.XXXXXXX.","..XXX.XX.."}
Returns: 5
{"..X......XXX..X.....","XX...............X..","...X...X........X...",".X.....X..X.X......X","X.X..X..X...X.......",".XX.X.X.X.X......X..","........X....X......",".X.X....XX..X.....XX",".......X..........X.","..........X......X..","....X.X.X......XXX..","..X...........X..XX.",".X..X......X..X....X",".X..XX.X...........X","..X.....X.....X.....","....X...XX....X.....","..XX.........X....X.","...XX......XXXX.....",".........X........X.","..X......X..........",".X.X....X...........",".................X.."}
Returns: 100
{"XXXXXXXXXXXXXXXXXXX","XXXXXXXXXXXXXXXXXXX","XXXXXXXXXXXXXXXXXXX","XXXXXXXXXXXXXXXXXXX","XXXXXXXXXXXXXX.XXX.","XXXXXXXXXXXXXXXXXX."}
Returns: 2
{".............",".............",".............",".............","............."}
Returns: -1
{".....X.....","........X..","........XX.",".XX.X......","........X..",".....X.....","...........",".X.....X...","...X....X..","..X........","...X...X...","...........","...........","...........","...........","..........."}
Returns: -1
{".....X.X.XX..XX.","......XX..XXX.X.","XXXXXXXX.XX.XXX.","XXX..XX.XX...XX.","XXXX.X.X.X...XX.","..X..XX.XXX.XXX.","XXX.X...XX.XXXX."}
Returns: 19
{"................",".....X..........","................","................","........X.......","................","................"}
Returns: 28
{"XXX.X.X.XXXXX.X.XX.XXX","XX.X.XXXXX..X.XXX.X.XX","XX...XXXXX....XXXXXX..","XXXX..X.X.X.XX..XXX.XX","X.X..XXXXXXXX..X.XX.X.","XX.XXXX..XX.XX...XX..X","..XX..X..XXXXXXXX.X.XX","X.XXX..XXX.X.XXX..X.X.","..XX.XX.X.XX..XXXXXXXX","..XXXXXXXXXXX..X.XXXXX","XX.XXX.XX.XX..XX..X.X."}
Returns: 31
{"X",".","X","X"}
Returns: -1
{".................","....X...........X","..X.......X..X...","................X","...X.........X..."}
Returns: -1
{"XX.XXX.X...XX.XX","X.X.XXX....X...X",".X.XX...XX.XXX..","....XXXXXXX.XXX.","XXX....X..XXXX.X","..XX.X.XXXXX..XX","XX.X.XXXX..XX.XX","X.XXXXXXXXX.X.XX",".X..XXX.XX.....X",".X.XX...X.XXXXX.","X.X...XX..X..XXX","XX.XXXX.X.XXX..X",".XXX.....XXXX.X.","X.X...XXXXXX....","XXX.XXXXXX.XX.XX","XXXX.X.X.XX.XX..","XXXXX..XXX.XXXX.",".XXXX.XX...X..X.","X.XXX..XXX.XX...","..XXXXX.X.XXX..X"}
Returns: 49
{".XX.X.","X.....",".X....","..X.X.","X.....",".X....",".X....","......",".X...X","X.....","XX....","XX...X",".X....","...X..","...X..",".XXX..","......","...X..","......","......","XXX.XX"}
Returns: 29
{"XXXXXXXXX","XXXXXXXXX","X..XXXX.X","XXXXXXXXX","XXX.XXXXX",".XXXXXXXX","XXXXXXXXX",".XX.XXXXX",".XXXXXXXX"}
Returns: 6
{"X.X..XXXX",".X.XXXX.X","..X..X.X.","XX...XX.."}
Returns: 6
{"..X.X.....XXXX.......X","X.XX..XX....X...XX.X..","XX.XXX.X..XX.X.X..X...",".X..XXXXX..XX...XX.X.X","...XXX.X.X.X..XX..X.X.","X.X...XX...XXXX..XXX.X","...X...X..XXXX.XX.XX..","X......X.X..XXX.XXXXXX","...X..X..X.XXXXX.X...X",".XX.X.XXX.XX....X...X.",".X.XX.X.XXXX...X...X.X","X.X.XX..X.X.XXX..X..X.",".X...X..XX.XXXXX..XX..","....XX....XXXX.XXX..X.","XX..XXX.X.X....X..XX.X","..X...XX....X.X.XX.X..","X....XX...X.XXXXXX....",".X.....XX..X.XXXXXX...","X.XX....X...X...X..XXX",".X..X..XX.XX..X.X..X.X",".X.......XX...X...X.X.","XX..X.X..X.X...X.XX..X"}
Returns: 88
{"X..XX..XXXXXXXX..X..X.","XXXX.XX....X.XX.X.XXX.",".X..X..XX.XXXX...XXX.X",".XX.X.X...X..X..XXXXX.","XXXX.X..X..XX...X.XXX.","XXX.XXXXX......X...XX.",".XXXX.X.X.X.XX.X..XX.X","XX..XX...X.X.XX.X.X...",".XXXX..X.X.XXXX..XX...","XX...X..XX.X..X...XXXX",".X.X.X.........XX.X.X.","XXX.X.XXX..X.X.X.XXXX.",".XXX.XX..XX...XXX...XX","X..XX.X..XXX.XXXX.X.X.","..XXX.......XXXXX.XX..","XXX..XXX.X..X.....XXXX",".XXXXXX.XXX..X.X.XX..X","...X.XXXXX.........XXX","...XX...XX....XX....XX","XX.X.X...X...X.X..X..X",".X...X.X.X.X.X..XX.X..",".XXXXXX.XX.X.....XX..."}
Returns: 85
{".XX..XXX.XX.XX.XX.X...","X..XX.XXXXXXX.XX...XXX",".XXXXX.X...XX....X.X..","...X.X.X..XX.X..X.XXXX","XX.XX..XX..X.XXX.XX.XX","..X..X.XXX..X..X......","XX.XX....XX..X..X.XXXX",".XXXX...XXX.X..XX.X.X.",".X.XXX....XXX.X.XXX...",".XX..X..XX..X.X...XX..","XXX..XX....X..XXXX..XX","X.X...X.XX.X...XXXX.X.","XX.X.X.XXXXX..XXX.XX..",".XXXXXX.XX.XX..XX..X..","X....X.XX.XX.X...X..X.","X.X......XXXXXXX..X.XX",".XXXX..X.XX....XXXXXXX","X...X..XX.X.XXX...XX.X","..X..XX....X..XXX..XXX","XX..X..X.XX.XXX.XXX..X",".XX.X.X.X..X....X.X...","XXXX.XXXXX.X.XXX.X...."}
Returns: 78
{"...X..X.X..XX.XX....X.","..X....X...XX...X...XX","XXXX.....X..XXXXX..XXX",".XX...X...X..XX.XX....","XX.....X..XX..X.X.XXX.","XX.X.XX..XXX.X.XX...X.","X.X.XXX..X.X.X..X..X..",".X...X.XX.X.....X....X","..X..X.XX.X...X...X..X",".X.....X.X...XXX.XX.XX","..X.XXX..X.XXXX.XX....","..XX...XX..X..X..XXX..",".X.X...XXXXX....X..XXX",".XX.XXXX..XX.X...XX..X",".X...XX....X.X....X..X","......X....X....X...X.","..XXX...X.XXXX......XX",".XXX..XX...X..XX......","X.X.X.X.XX.X...XXXXXXX","X..X.XXXXXXX.....X....","..X...XXX.XX.........X","..XX.X.X.X..XXX......X"}
Returns: 89
{"XXX.X..XX..XX..X.X.X.X","XXXX.XXXXX.....XXX...X","...X...XXXX.X.XXX.....","X.XX....X..X.X.XXXX..X","X.XXXXXX.X.XX.XXXX.XXX",".X.....XXX...X...X.XX.",".X..XXXX.X.XXXXXX..XXX",".X..XX.XXXXX..X.XX.X..","XX...XX...X...XX.X...X","XX...XXX.XXXXXXXX.XXXX",".XXXX..X.XX.X.XXXXX...",".XXX.X....X.XXX.X.XXX.",".XX.XXXXX.X.XX..XXX.XX","X...XX.XXXXX.X.X...X..","X...X..XXXXXX.X.XXX.X.","...X.XX.......XX.XX.XX","X.X....X.XXXXXX.X..X..",".X.XX..X..XXX.XX..XXXX","X.X..X.XXX.X.X....X.X.","XXXX..XXX.X...X...XXX.","XX..XXXXX.X.XXXX..X..X","...XX.X..X..X.XX.XX..."}
Returns: 79
{"X.XXX..X...X.XXXX.....","..X...X..X.X..X..X..X.","..XXX..XXX...XXXXXXXXX","..XX.XX.X..X...XX...XX","X.X..X.....X......X.X.","X....XX..........X.XX.","X.X..XX..X.....X....X.",".X.X.X.........X..XX..","..XX.......XX.X..XX...","X..X....X.....XXXX..XX","X.X.X..X....XXX.X..X.X","X.....X..XXXXXXX.X.X.X","...X.X.XXX...X.XXX..XX","..XX...XXXX.XX...XX.X.","X.X.XXX.X...XX....X..X","XX..X.XX..X...XX.XX.XX","XXX.XXX...XXX......XX.",".X.XX.XXXXX..XX..X..XX",".XXXXXXX.XXXXX...XX.X.","..X..X......X..X.XX...","..XX.XX.X..X...X..X...","X..X..X.X..X.X.XXXXXXX"}
Returns: 87
{".X.XXXXX...X...X.....X","X.X.XX.XX.XXX..XX.X...","XX..X..XX.X....X...XXX","......X.XX.X.X.XX..X..",".XXXX.........XX.XX.X.","X.......XXX.X...X.X..X","X....X...X...XX..X...X","XXX..XX.....X.XX.XX...",".XX.X.XXX.X.XX.XXX..X.",".XXX.XX...XX..X..XX...",".X..X.XXXX....X.....X.","XX.XX....X..XXXX...XX.","..XXX.XX..X.X...X..XXX","..X.XX.XX..X.XX.X...X.",".XXXXX..X.XXX..X....X.",".X..X.XX...X..XXXXX.XX","...XX.XX.X.X.XXXXXXXX.","X...X..X.XX..XXXXXXX..","XX.X.X...XX.X.X.X.XX.X","XXX.X.X..XX.X..X..X.X.","X.X..X..X..X..XX...XX.","...X.XX.X.X..XX..XX..X"}
Returns: 88
{".XXX..X...XXXXX.XX..X.","X.X....X..X...XXXX.X..","..XXXXX.X...XX.XXXX.XX","X...X.....X.X.XXX...XX","X.X....XX..X.XXXX..X.X","XXXX.X.XX.X..X.XXXXX.X","XXXX.....X..XXX..XX.X.",".X.XXXX.XXX..X.XXX.X..","X.X.XXX.X..XXXX..XXXX.","XXXXX....XX..XXXXX.X.X","X.XXXXX.X.XX.XXXX...XX","XXX.X..XX.XX.XX.XXXXXX","X.X.XX..XX.XX..XX....X",".XXX.X.XXXX...XXX..XX.","XXX...XXX.X.XX.XXXX.XX",".X.XX.X.X...X.XX..XXX.","XX.XX.XXXXXX.X..XX.X..","XX...XX.X...X...XXXX.X","..X...X..X.X.X.XXX..X.","X.XXXX.XX.XX.X.X.X..X.","XX..XXXX...X.........X","X..XXXXXXXX....XX....X"}
Returns: 76
{".XXXXXXX.X..X.XX.XXX..","X.XXXX.X.....XX...XXX.","XXX..XXXX.XX.XXXXX.XXX","..X.XX.X..XX...X..XX.X","XXX.X...X...XX.X.XX.XX","..X..X..XXX.XX.XXX.XXX","XX.X.X..XXX..X.XXX...X","XX..X.XXX...X.XXXXX.X.",".XXXXX.X...X.XXX.X.X.X","....X.X.XXXX..XX.X....",".X...X.X..XXXXX..XX.XX","XX....XXX.XXXX...XXX.X","XX..X...X..XX.X.XX.X..",".....X.X...X.X...X.XX.","..X.XXX.XX.X..X..XXXXX","XX....XX...XX.........","...XXX..X...XXXXX.XX..","XX.XXXX..XX..XXXXX.X.X",".XXXXX...XXX.X..XX.XXX","XXX.XXXXXXXXXXXXXX.X..","..X..XXX..X...X.XXX..X","X.X...X......XX.X..X.."}
Returns: 78
{"...XX...XX.X.....XX.XX","X.X...XXX.X.XX.X....XX","......X.XXXXX...XXXXX.","....XX.X.X..X.XXX.X...","...XX....X..XXXX.XX..X","..XXXXXXXX.XXX.X....XX","X.XX..XX...XXX.X.XXXXX","..X.XXX.X.X..X.XX....X","XXXX.XX.XX.XX.XX....XX","XXX.XX..XX.X.X..X...XX","..X...XX..X.XXXXX.X.XX",".XXXX..XX..XX...XX....","X..X..XX.XX.X.XX.X..XX","XX.X.XXX....X.X.XX.X.X","....XXX..XXX.XX..XXXX.",".X.X.XX....X.XX.XX.X..",".X.X..XXX.XXX.X.X.X...",".......X...X.X.X.XX.XX",".X.X.XX..XX.XXXX...XX.",".X...XXX..X.....XXX...","XX....X...XX...X.XX...","..X..XX.X..XX..X.X...."}
Returns: 85
{"XXX..X...X.XX..X..X.X.","X.X.X....XXX.X...X...X","...XX..X..X.X......XX.","XXX.X.XXX.X.X...X.XXX.","XX.XX...XXXX..X..X..X.","....XXX.XXX.....XXX.XX","XXX.XXXXXXXX..X..X.XX.",".X.XXXX.X..XX..X......","..XX.X....X.XXXXXX....","XXX..XX..X...X.XX.....","XX..........XXX.XXX.XX","..XXXXX.X..X.....X....","XXXXX..XX.X..XX..XX...","XXX.X.XXX..X.X......XX",".XXX.X.X..XXXX.XXX...X","X.X..X....XXX.....XXX.","X.X.X.....XX.XXX.X.X.X","X.....XXX..XX.X.X..X..","X.X....XXX..XX..X..XX.",".XXXX...XX..X.XXXXXX.X",".X.XXXX....XX.X.XX..X.","XX.....XXX.X......XX.X"}
Returns: 83
{"...X.X..XX..XXX..XX.XX","..X...XXXX.....X..XX.X","X.X..X.X..XX.XX..XX.X.",".XX..X...X.XX..X..XXX.","X..X...X.X....X.....X.",".XXXX.XX.........X.X..",".XX..X.X.XX.X.X.XXXXXX","X.X.X.X.XXXX.XXXX.XX.X","..XXX....X..XX..XX.X..",".X.X.XX....XX..XXX..X.","...XXX.XX..XXX...XXXXX","X.X.XX.X.XXX.XXXXX.X..","..X...X...X.X.XXXXXX.X","X.X.XXX.X.X.XX.....XXX","X..XX....X..X.XX.XX..X","XX.X.X......XX.X....X.","...XX..X.X.X..XXX..XX.",".X...X..X.X..X....X.X.","..X..XX.X...X....X.XX.","XX...X.X.X.X.XXX...X.X","X.X....X.XX...X..XXX..","...XX.XXXXX.X...XX.X.X"}
Returns: 88
{".XXXXXXXX.XXX.X..X...X","X..X..X.X.XXXX..XX..XX","....X.X.X..XXX..X....X","XX.........X.XX.XXXX..",".XX....X.XX.XX.X..XX..",".XXX.X...X..XXXX.X.XXX","X.X.XXXXX.X.X..XX.X..X","XXXX..X..XX.X..XXXXXXX","...XXX...XXX.X..XXX.X.","XX...XXXX.XXX..XXXX...","XXX.XXX...XX..XX.XXXX.","XX..X.XX.X..XXX.X....X","X..X.XXX.XX.XX.XXX.XX.","..XX...XX.XX..X.XXX.XX","XXXXXXX..XXXXXX...XXXX","X..X.XXX..XXXX...X..XX","..XX.XXXXX.XX..X.XXX.X","XX..X.X.XXX.X.XX.X.XX.","..XXXXXX.XX.X.X...XX.X","XX.XXXX.X.X.X..XX....X","..X.....XX.XXXXX...X.X","XX.X..XX.....X.X.....X"}
Returns: 75
{"..X.X.X..XX.XXXX..XXXX","X.X.X.XXX.XX.....XXXX.","XXX....X..XXXXXXXX..X.","XXXXXX.X.X.XXXXX.XX.XX",".XX.XXXXX.XXXX.X.X.XX.",".XXX.X.XX.X.....X.XX.X","X....XX..XXX..XXX.XX.X",".XXX.XX.XXXX....XXXX.X",".X.XXX.XX.XXXXX......X","XX.XXXX..XX.X.XXXXX.XX","XXX.XXX..X.X.XXX....XX","XX.....X......XX.XX.XX",".XXXXXX..XX..X.X.X..X.",".X..X.XXXX.X...X..XXX.","XXXX..X.XX..XX..XXX..X","XXXXXX.XX....XXX.X...X",".XX.X.XX.....X.X..XXXX",".X.XX.XX.XXXXX.XXX.XXX","...XXXX.XXX.XX.....X.X",".XX..X.X.XX.X...X.X...","..XX.XX..X..XXX.XXXXXX","...XXX..X.X..XXXXXX.XX"}
Returns: 74
{"..XXX...X.XX.X..X..X..","X.X.......XXX.X.X....X","XXX..X.XX.XX..X..X.X.X","X.XXXX..XX.XX.X..XXX.X","XX.XX..XXXX..X.XX..XXX","XXX.X.X..X.X..X..XX.X.","....X.XX...XX.X.....X.","X.X.XXXXXX.X....XXX..X","..X....XX...X...X.XX.X","..X..X.XX.XXXXX..XXXXX","XXX.XX.XXX...XXX....XX","X.XXX.X....XX.X.XXX..X","..XX....XX....XXX....X",".XX.XX.XXX.XX.XX.X.XXX",".XXXX.X.XXX.XXX..X.X..",".....XXX......X....X..","XX...XXX...X...XX..XX.","X....XX.X..........XXX","X.X..XXXXXXXXXX..X.X..","..XXXX..X.X...XXXX..XX","X..XXXX...X.XX.X......","X.X...X...XXX..XX..XXX"}
Returns: 80
{".XX.XXX.....XXX..X.X..","...XXX..XXX.XX..XX.X.X","XX..X.XX..X...X.XXX.X.","XX...XXX.X.X...X.XX.XX","..XX..X.X.XX..X.X..XXX",".....XXXXXXXX.....X..X",".XXX..X...XX...XXXX...",".X..X.XX.....XX.X..XX.","X...X...X.XX......XXX.",".....XXXX....XXXXXX...",".XXX.XX..X..XX.X.XX..X",".....X.XXX.XX....X..X.","X..XX..XX.X.XXX....X.X","X..X......X..XXX.XX...","X.X.XXX...X..X...XXX.X","XXXXXXX.XX...XXXXXXX.X","...X...XX...X.X.XXXXXX","X......X.XX.X....XX.X.","XXX.X..XXX.XX.X....X..","X.XX.XX.X..XX.XX.X.XX.",".X..XXX.X.XX..XX.XXXX.","...X...XXXX.XXXXXX...X"}
Returns: 84
{".XXX.......X.X...XXX.X","X.X...X.....XX......XX","XXXXX..X.XXX.X.....X.X","XX.X.X.XXX..XXXXX.X...",".XXX..XX..X....X.XX.XX",".X...X.X.XX.XX.....X.X","....X..X.X..X.X.X.X...","X....XXXXX...X..XX....","XXX..XXXX.XX.X...X..X.",".X.X...XX....X...XX.X.",".X.XXX.XXXXXXX...XXXXX","....XXX..X....XXX.XXX.","....XXX..X..XX.X.XX...",".XX.XX..XX......X...X.",".XXX.X.....X.X.X.X.X..","...XXXX.XX.XX.X..XX.XX","XX.XX..X..X.X...XX.X..","....X...XXXX..X..X..X.",".XX......X.....X.XXXXX",".XXXX......X.X..X.....","X.XXXXX...X...X..XXXXX","...X.......XXXXX..X.XX"}
Returns: 88
{"XX.X...XX..XX.XXX.XX.X",".X.XXXX.X.XXXXXXXXXX.X","XX..X..XX.X.X..XX.....","XXX..X.XX..X...X..X..X","X....XX.X...X....XXXX.",".XXXX.XX..X.XX.X..XXXX","XX.XX...X..X.XXXX..XX.","X....XX.XX.X.X.XXXX...",".X.XXXXXXXXX...X..X...",".X...XXXXX.X.X.......X",".XXXXXX..XXXXXX.XXX...",".XX.X.X.X.XX.XXXX.X.X.","..X.XXXX..X...XXXXXX.X","XX.XX.......XXXXXXXXX.","XXX...X..XX.XX..X..X..","X.XX.XX.XXXX.X.X.X..XX",".X.X.....X...XX.....X.","XXXX.....XX....X.XXX.X","XX.X.XX...X...X..XX.XX","..XXX...X.XXXX.X.X..X.","XX....XXX.X......XX...","XXXXX....XXXX..XX..X.."}
Returns: 80
{"X..X...X.X..X.X.XX.X..","X..X.X..XXX.XXX..XX.X.","X.X.X....XXX...XXXXXXX","..X..XX..X..X...X..X.X","....X...X...X.XXXXX..X","XXXX.XX..X.X..XX.XX.X.","X.XX.XX....X......X...","...XX.X.X...X..X.XX.XX",".XXX..XXX..X.XXXXX....","XX..X...X..X..XXXX.XXX",".X..XX....X...X...X.X.","X..X..X.......X.X.XXXX","X..X.XXXXX.XX..XX...XX",".X.X.XXX....XXX..X.XX.",".X..XXXXX.XX.X.X..XX..",".X..X.XX.XX.XX.XXX..XX","XXXX.X.XXX....XX.....X","X.......XXX.XXXXX..X.X","XXX.X..XXX.XX..X.....X","...XX.XX.XXX..XXXX.X..","XX.X.XXX.X...X.X.X....",".X.XXX...XXX.....XX..X"}
Returns: 83
{"XXXX.XX..X.X....XX...X","XX.XXX.X.X..XXX...XXXX",".XX...X..XX.X..XX.XXXX",".XX...XXXX..XXXX.XXX..","X......X.XX.X.XXX..X.X","..X.X...X.XX.XX..X....","...XX.X..X.X.X.X.X....","XXX..XXXXX.XX.X.X.XXXX",".X.X..X..XX.X.X.X..XX.","X..XXX.X.X.X......X.X.","X.....X..XXXXX.XXXX...",".....X..XXXXX...X..X..","X.XX...XX....X.X.XXXXX","X..X.X.X..X.X.XX..X.X.","X.XX.XXX.X..X...X.XX..","...X..X...X.X...X..X..","XX.XXX.X.X.XXX.....XXX","....X.X..XXX...X.XXX.X","X..XXXX....XX..X.X..X.",".........XXX..X...XX.X","X....XX..XX...X.X.XXX.",".X.XX...X..X.XX.X...XX"}
Returns: 87
{"."}
Returns: -1
{"..", ".."}
Returns: 1
{"X..", "..X"}
Returns: 1
{"..X", "X.."}
Returns: 1
{"...."}
Returns: 1
{"....................", "XXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXX", "....................", "XXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXX", "....................", "XXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXX", "....................", "XXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXX", "....................", "XXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXX", "....................", "XXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXX", "....................", "XXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXX"}
Returns: 35
{"XXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXX", "X....XXXXXXXXXXXXXXXX", "....................X", "X..................XX", "....................X", "X....................", "....................X", "X..................XX", "X....................", "....................X", "....................X", "X...................."}
Returns: 50
{".....................", ".....................", ".....................", ".....................", ".....................", ".....................", ".....................", ".....................", ".....................", ".....................", ".....................", ".....................", ".....................", ".....................", ".....................", ".....................", ".....................", ".....................", ".....................", ".....................", ".....................", "....................."}
Returns: -1
{"XXXXXXXXXXXXXXXXXXXXX", "....................X", "....................X", "....................X", "....................X", "....................X", "....................X", "....................X", "....................X", "....................X", "....................X", "....................X", "....................X", "....................X", "....................X", "....................X", "....................X", "....................X", "....................X", "....................X", "....................X", "....................X"}
Returns: 105
{"..........X...........", "..........X...........", "..........X...........", "..........X...........", "..........X...........", "..........X...........", "..........X...........", "..........X...........", "..........X...........", "..........X...........", "..........X...........", "..........X...........", "..........X...........", "..........X...........", "..........X...........", "..........X...........", "..........X...........", "..........X...........", "..........X...........", "..........X...........", "..........X...........", "..........X..........."}
Returns: 121
{"X..X..X..X..X..X..X..X", "......................", "......................", "X..X..X..X..X..X..X..X", "......................", "......................", "X..X..X..X..X..X..X..X", "......................", "......................", "X..X..X..X..X..X..X..X", "......................", "......................", "X..X..X..X..X..X..X..X", "......................", "......................", "X..X..X..X..X..X..X..X", "......................", "......................", "X..X..X..X..X..X..X..X", "......................", "......................", "X..X..X..X..X..X..X..X"}
Returns: 105
{"X..X", "....", "X..X"}
Returns: 2
{"XXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXX", "XXX.XXXXXXXXXXXXXX.XXX", "XXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXX", "XXXXXXX.XXXXXX.XXXXXXX", "XXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXX.XXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXX", "XXXXXXX.XXXXX.XXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXX", "XXX.XXXXXXXXXXXXXX.XXX", "XXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXX"}
Returns: 9
{"X", "X", "X", "X", "X"}
Returns: 0
{ "X.XXX...XX", "XX.XX....X", "X...XXXXX.", "XXXX..XXX.", "XX.XXXXXX.", "X.X.X.X.XX" }
Returns: 9
{ "XX.X...XXX", "XXXXXXXX.X", "XXXXXXXXXX", ".XXXX.XXXX", "XXXX..X.XX", "XXXXXXX..X", "XXXXX.XXX." }
Returns: 7
{ "XXXX", "X.XX", ".XXX", "XXX.", "..XX", ".XXX", "X.X.", "XX.X", ".XX." }
Returns: 6
{ "X.XXX....", "..XXXXX.X", "XX..X..XX", "...X..X..", "..XX....X", "XXXXXX.XX", "XXX.XXXX.", "XXXX.X.X." }
Returns: 10
{ "..X..X.X..", ".X..X.X...", "XX...X....", "...X....X.", ".X....X.X.", "...X......", "X.........", "...X......", "X...X.X...", "..XX..XX.." }
Returns: 23
only 2 possible solutions in this case
{ "X.XX.XXX.X", "XX.XXX..X.", "XXXX.XXXX.", ".XX..XX.X.", "...XXXXX.X", "X..X...XXX", ".XX..XXXXX", "X.XXX.X...", "X.X.....XX", "..XX.....X" }
Returns: 16
1 solution
{ "X..XX..X..X.XXX", ".XX.XXX...X.XX.", ".XX.X...XX..XXX", "...XX.XX...X..X", "...XX..XXXXXXX.", ".X...XXX.....X.", ".XX........XX..", "...XXXXXX..X.X.", "..X.....XX...X.", "XXXX..XXXXXXX..", ".XXXX.X.X..X.X.", "...XX.X.X..XXX.", ".XX.XX..X..X.X.", ".XXXXX..XX...X.", ".XXX.XX.X..XX.." }
Returns: 40
2 solutions
{ ".X.X.X.X.X.XXXX.X.", "XX..X..XX....XXXX.", "X.X.X.X........XX.", "XXXXX....X...XX...", "X..X..X.XX...X..XX", ".X.XX..X..XX...XX.", "...X.X..XX..X...XX", ".X.X.X.X.XXXX.X...", ".X.XXXXXXX..XX..XX", ".XXX..XX....XXXXX.", ".XX.XXX.X.X.X.XXX.", "XXX.X.X.XXX.X.X.X.", ".XXXX..XXX..XXXX.X", "X..XX.X..X..X...XX", ".XX.XXX..X..XXX..X", "X.X.XXX..X..XXX.X.", "X.XXXXX.X.X.X.X.X.", ".XX.XX....X....XX." }
Returns: 57
2 solutions
{ "X..X......", ".XX..X..X.", "....X.....", "X.X.......", ".....X....", ".X.X......", "...X.X.X..", ".X.X..XX..", ".X.X.X.X..", "......XX.." }
Returns: 23
1 solution
{ ".......XXX..", "...X.X...X.X", ".XXXX.......", "..XXX..XX..X", ".X.......XXX", "........XX..", "X.....X.X.X.", "....XX......", "...X.....XXX", "XX.X..X...X.", ".......X....", ".........X.." }
Returns: 31
1 solution
{ "..X..X........", "......X...X...", ".X..X....X..X.", "...X.....X....", "...X.X.......X", "X.....X...X...", "..XX..........", ".XX..X....XX..", "X..X..........", ".XXXX.........", "...........X.X", "......XX......", "X....XX.X.....", ".X....XX....X." }
Returns: 44
3 solutions
{ "XXXXX.X..X..XXX......", ".XXX.X...X.X.X.X.X.X.", "X..XXXXXXX....XX.XXX.", ".XX....X..XX..XX.X.X.", ".XX..X............XXX", "XXX.......XX..XX.X.X.", "...X.X.XXXXXXX...X.X.", "X..XXXXX.X..XX.X.XXX.", ".XXX.XX.X.....X.XXXXX", "..XXXX.....X.X...X...", ".X.XX....XX..XX.XX..X", "XXX..X....XXX..X....X", ".XX.X..X..X.XXX..X.X.", "XX..X....X.XXXXXXXXXX", ".X.XX.XXXXX..X.X..XX.", "X...X.XX.XX..X.X...XX", "X.X.X....XXXXX.X.X.X.", "XXX.XXXXX.XXXXX....X.", ".X.XX...XXXXX.XX..XXX", ".X.XXX.X.XXXXX..XX...", "XX..X..XXX..X.XX.X.X." }
Returns: 74
4 solutions
{ ".XXXX......X....", "...........X....", "..X...XXX...X...", "......X..X......", "........X.....X.", ".X..XXX.........", "..............XX", "XX....X..X....X.", ".....X...X....XX", ".....X.X.X...X.X", "..X.......X...X.", "...X.......X....", "..X........X..XX", ".....X.XX.....X.", "..X....X..X.X.X.", "..X..X...X..XX.." }
Returns: 57
{ "X.XX.XXXXXXX", "X..XXXX.XXXX", ".XXXX.XXXXXX", "X..XXXXXXXX.", ".XXX.X..XXX.", "X.XXXXX..XX.", "XXX.X.XXXXXX", "XXXX.XXX.XXX", "X.XXXX.X.X.X", "XXX.XXX..XXX", "XXXXXXXX..XX", ".XX.XXXXXX.X" }
Returns: 15
{ "..XX.XX.XXX.XX", "XX.XXXX.X.XXXX", "XXXXXXXX..XXXX", "X.XXXXXX.XX.X.", "XX..XXXXXX.XXX", "XXXXXXXXXXXXXX", "XXX...X..X.X..", "XXXXX.XXXXXXX.", "XXX..XXXXXX.XX", "XX.X.XXX..XXXX", ".XXXXX.XXX.XXX", ".XXXXXXXX...XX", ".XX.XXX.XXXX.X", "XXXX.XX.XXX..." }
Returns: 20
{ "XXX.XXXXX.XXXXXX", "XXXXX.X.XX.XXXX.", ".XXXX.X..XXX..XX", ".X.X.XXXXXXXXXXX", "XXXX....XX.XX.X.", "XXXX.X.X.X.XX.XX", ".X.XX..X..XXXXXX", "XXX.XXXX.XX.XXX.", "XXXXX.XXXXXXX.X.", "XXX.XXX.XXX.XXX.", ".XXXX.XX..XXX.XX", "X..XXXXXXXXX.XXX", "XXXXXXXXXX.XXXX.", "XXXXXXXXX..XX.XX", "XXXXXXXX.XX...X.", "XXXXXXXXXXX..XXX" }
Returns: 27
{ "X.X....XXXXXX.X.X.", "XXXXXX.X.XX.XXX.X.", "X..X.X.XXX..XX..XX", "XX.X.X...X.X.XXX.X", ".XXXXXXXX.XXX.X.X.", ".X.XXXX.XXX.XXXXXX", "XXX.X.XX.XXXXXXXXX", "X.XXXXX.XXX.XXXXXX", "XXXXXXXXX.XXX.X.XX", ".X.XX.XXXXXXX.XXXX", "XXXXXXX.XX.XXXXXXX", "XXXX.X.XX.XX.XXXXX", "XX..XXXXX..XX.XXX.", "XXXXXXXX.XX.X.X.XX", "XX..X.XX..XXXX..XX", ".XXXXX.XXXX.XX.XX.", ".X.X.XX.XXXXXXXXX.", "XXXXX.XXXXXXXXXXX." }
Returns: 38
{"XXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXX", "XXX.XXX.XXXXXX.XXX.XXX", "XXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXX", "XXX.XXX.XXXXXX.XXX.XXX", "XXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXX", "XXX.XXX.XXXXXX.XXX.XXX", "XXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXX", "XXX.XXX.XXXXXX.XXX.XXX", "XXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXX", "XXX.XXX.XXXXXX.XXX.XXX", "XXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXX", "XXX.XXX.XXXXXX.XXX.XXX", "XXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXX", "XXX.XXX.XXXXXX.XXX.XXX", "XXXXXXXXXXXXXXXXXXXXXX"}
Returns: 28
{"XXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXX", "XXXX.XXXXXXXXXXXX.XXXX", "XXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXX", "XXXX.XXXXXXXXXXXX.XXXX", "XXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXX", "XXXX.XXXXXXXXXXXX.XXXX", "XXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXX", "XXXX.XXXXXXXXXXXX.XXXX", "XXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXX", "XXXX.XXXXXXXXXXXX.XXXX", "XXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXX", "XXXX.XXXXXXXXXXXX.XXXX", "XXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXX", "XXXX.XXXXXXXXXXXX.XXXX", "XXXXXXXXXXXXXXXXXXXXXX"}
Returns: 14
{"XXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXX", "XX..XXXXXXXXXXXXXX..XX", "XX..XXXXX..XXXXXXX..XX", "XXXXXXXXX..XXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXX", "XX..XXXXXX..XXXXXX..XX", "XX..XXXXXX..XXXXXX..XX", "XXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXX", "XX..XXXXXXXX..XXXX..XX", "XX..XXXXXXXX..XXXX..XX", "XXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXX", "XX..XXXX..XXXXXXXX..XX", "XX..XXXX..XXXXXXXX..XX", "XXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXX"}
Returns: 12
{"....XX..XX.XXX.XXX.X.X"}
Returns: 5
{"X....................X"}
Returns: 5
{"X....................."}
Returns: -1
{"...........X.........."}
Returns: -1
{"..XX..XX..XX..XX..XX..", "..XX..XX..XX..XX..XX..", "XX..XX..XX..XX..XX..XX", "XX..XX..XX..XX..XX..XX", "..XX..XX..XX..XX..XX..", "..XX..XX..XX..XX..XX..", "XX..XX..XX..XX..XX..XX", "XX..XX..XX..XX..XX..XX", "..XX..XX..XX..XX..XX..", "..XX..XX..XX..XX..XX..", "XX..XX..XX..XX..XX..XX", "XX..XX..XX..XX..XX..XX", "..XX..XX..XX..XX..XX..", "..XX..XX..XX..XX..XX..", "XX..XX..XX..XX..XX..XX", "XX..XX..XX..XX..XX..XX", "..XX..XX..XX..XX..XX..", "..XX..XX..XX..XX..XX..", "XX..XX..XX..XX..XX..XX", "XX..XX..XX..XX..XX..XX", "..XX..XX..XX..XX..XX..", "..XX..XX..XX..XX..XX.."}
Returns: 61
{"XXXXXX..XXXXX.XXXX....", "X.XX.XXXX.X..XXXX.X.X.", ".X.XXXXXX..XX.XXXXX..X", "XXXXX.X.XX...X.X.X.XXX", "XX..XXXXX..X.XX....XX.", "XXXX..X...X.X.XX.XXXXX", ".XXX.XX.XX..XXXXX.XXXX", ".X.X.XXX.XX.X.XXXXXX..", "...XX.XX.X.XXXXX.XX..X", "XXXXX.XXXXX.XX.XXX.X..", "X.XXX....XXXXXXX..XXXX", "XXXX.XX.X.X..XXXXXX...", "X.X.XXX.XXXXXX.XX....X", "XXXXXX..XXX.XXX.X.XXXX", "XXX.X.X.XXXXXX.XXX.XXX", "XXX..XXXXXXX.X.XXXX.XX", ".XXX.XXX.XXXXX...X.XX.", "X.XXXXXX.XXXXXX..X.XXX", "XX.XXXXXXX.XXXXXX.XXXX", "X.X..X.XXXXXXXXX.XXXXX", "XXXXXXXXX.XXXXXXXXX.XX", "X.XXX.X.XXXX.XX...XX.X" }
Returns: 63
{"..XX...........XX.....", "..XX..................", "...........XX.........", "........XX............", "....XX................", "......X..X....X.......", "...X......X....X..X...", ".....X..X..X..X...X.X.", "...X.....X...X.....X..", "......X..X..X.........", ".X...X...X...X........", ".X.......X....X....XX.", "........X..X...X......", "....X.X.X...XXX..XX...", "....X...X..XX...XX....", ".....X....X...........", "...X....X....X........", ".........X....X.......", ".....X.......X........", "...X.....X..X......X..", "....X........X..X.....", ".........X.........X.." }
Returns: 113
{"......XX...........X.X", ".........X.X.....X....", "...................XX.", "..........X.....X.X...", "..X......X.....XXX...X", "....X....X.X.X........", ".................X....", "..X.X...X...........X.", "X.X..X..X.X.....X...X.", "..............X.......", ".....XXXX.......XX....", ".........X..X......XXX", ".X.....X.........X....", "...........X.....X....", "...X..........X.......", "...XX.........X....X..", "X...X.........X...X...", "........X......XX.X...", "..X.......X...........", "...X..................", ".........X............" }
Returns: 110
{"XXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXX" }
Returns: 0
{"..XX.XXX.X.X....X.X.X.", "..XXX..X...X.X.X.X.XXX", "..X..XX.....X..XX.X.X.", "X.X..XX..X.X...X.XXX.X", "X.X....X..X..XXXXX.X..", "X.XXXX...XXX..X..X..XX", "X.XX.XXXX.X.XXX.X.....", ".XXX..XXXX.X.XXX..X.X.", "X....XX..X...X..X.X...", "...X...XX...XX....XX..", ".X.....XXX.XX.XXX..XXX", "X......XXX.XX.X.XXXXX.", "X..X...XX..X..XXXXXX..", ".X..X.X....X..X...X.XX", ".XX....XX.X.XX.X.XXXX.", "X.XXX..X.....X..X.X.XX", "X.X...XX...XXXXXXX.X..", "..X....XX....X.X..XX..", "XXXXXX..XXXX..X.XXXXX.", "..XX..XXXXX....X.X..X.", "XX...X...X.X.XX..X..XX", "....XXXX.......XX.X..X" }
Returns: 84
{"......................", "......................", "......................", "........X.............", "......................", "...X..................", "...X........X.........", "...X..................", "...X..........X.......", "......................", ".........X............", "......................", ".............X........", "......................", ".............X........", "......................", "...........X..........", "........X.............", "......................", "......................", "......................" }
Returns: -1
{"......................", "......................", "......XXX.............", "......................", "......................", ".........XXX..........", "......................", "......................", "......................", "......................", ".X....................", "........X.............", "......................", "......................", "......................", ".........X............", "......................", "..X...................", "......................", "..........XXX.........", "......................", "...X..........X......." }
Returns: 120
{"..X...................", "..XXX.................", "..XXX.................", "..XXX.................", "..XXX.................", "..XXX................." }
Returns: 31
{"XX....XX.X.XXXXX..X..X", "..XXX.X...X....XX.X.X.", "X.X.XX.X.XXX...X..X.XX", ".XXX..XX.X..XXXX.X.X.X", "....X...X.X..X.XXX.XXX", "..X.XXXX.X.X.XX.X.X.XX", ".X.X.X.X..XX..XX.XX..X", "XXX....XX...XXXX.XX.XX", "..X.X...XXX.XXX....X..", ".XX.XX...X.XXXX.X.XXXX", "..XX.X.XX..X.X.XX..X.X", "XXX..XXX..XXXX.X..XXXX", ".X..X.XX..XXXX.....XXX", "...X.X.XX..X.X..X...XX", "X..X........X..XXX.X..", "...X.XX.....X.XX.X..XX", ".XXX.X.XXXX...X..X....", ".XXX.XXXX.X.XXX...X..X", ".XX.X..X...XX.XXX.X...", ".X..XX..X.X.....X.XX..", "XXXXX.XXXX.X.XX.X.XX.X", "XX.XXX.XX..XXXX......." }
Returns: 84
{".XXXXX...XXXX.XXX..", "XXXX....XXXX.X.X..X", "....XXXX....XXX.X..", "...................", "XXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXX", "X.................X", "..................X", ".XXXXXXXXXXX.X....X", "XXXXXXXXXXXXX.....X", "XXX..........XXX...", "...............XXXX", "XXXXXXX..........XX", ".........X.........", "..........X........", "...........X.......", "............X......", ".............X.....", "..............X...." }
Returns: -1
{"......................", "......................", "......................", "......................", "......................", "......................", "......................", "......................", "......................", "......................", "......................", "......................", "......................", "......................", "......................", "......................", "......................", "......................", "......................", "......................", "......................", "......................" }
Returns: 121
{".....XXX..............", "..............X.......", "......................", ".........XXXXX........", "......................", "...........XXXX.......", "......................", "........XXXX..........", "......XXXX............", "...........XXXXXXXX...", "XXXX..................", "XXXXX.................", "..XXXXX...............", ".........XXXXX........", "...........XXX........", "......................", "......................", "......................", "..........XXXXX.......", "........XXX...........", "..XXXXX...............", "............XXXXXX...." }
Returns: 109
{"XXXX....X.X.XXXXX...X.", "...XX.X..XXXX.X.XX..XX", "XX.XXX.XX..X..X.XX....", ".XX..XXXX..X.....X.X..", "XXX..XX..X.XXXXX......", "X.X.X.XX.X.X..X.X.X...", ".XXX...XX...X..X.XX..X", ".X..XXXXXXX.....XX.X..", "XX.XXX..XXX.......X...", "XXX...X.XX.XX.X..X..X.", "X...XX.X.....X.XXXX...", ".XXX...XXXX......XXX..", "..X.X....XX.X..X.X...X", "XXX.XXXX..X.....XX.X.X", "X.....XX.X...XX.X.X..X", "..X.....XXXXXXX.X...X.", "XX.XX......XX.X.X.X..X", "X...X..X.XX.X..X.X.X.X", "...X..XXX..XX.X....XXX", "X..XXXX.X.X.X..XXXXX..", "XX.X....X.XX...XX.XX..", ".XXX...X.X.X.XX..X..XX" }
Returns: 86
{"X.X.X.X.X.X.X.X.X.X.X.", "X.X.X.X.X.X.X.X.X.X.X.", "X.X.X.X.X.X.X.X.X.X.X.", "X.X.X.X.X.X.X.X.X.X.X.", ".X.X.XX.XX.X.X...X.X.X", ".X.X.XX.XX.X.X...X.X.X", ".X.X.XX.XX.X.X...X.X.X", ".X.X.XX.XX.X.X...X.X.X", ".X.X.XX.XX.X.X...X.X.X", ".X.X.XX.XX.X.X...X.X.X", ".X.X.XX.XX.X.X...X.X.X", ".X.X.XX.XX.X.X...X.X.X", "X.X.X.X.X.X.X.X.X.X.X.", "X.X.X.X.X.X.X.X.X.X.X.", "X.X.X.X.X.X.X.X.X.X.X.", ".X.X.XX.XX.X.X...X.X.X", ".X.X.XX.XX.X.X...X.X.X", ".X.X.XX.XX.X.X...X.X.X", "X.X.X.X.X.X.X.X.X.X.X.", "X.X.X.X.X.X.X.X.X.X.X.", "X.X.X.X.X.X.X.X.X.X.X." }
Returns: 110
{".XX.XXX...XXXX....XXX.", ".XXX.X.X.XX...X.X...X.", "XX..X.X...X..X.X.XXXXX", "......................", ".XXXXX.X...XXXXXX.....", "...X..X.X...X....XXXX.", "..X..X.X..XXXXX...XX.X", "XX.XX.X..X.XXXX.XXX...", "......................", "XXX.XXX.X.....X..X..X.", ".....X...X...X...XXX..", "X.X....X.X..X..XXXX.XX", "XXX.X..X....X......X.X", "X..X.X.X.X..X....XXXX.", "......................", "...X..X.X...X....XXXX.", "..X..X.X..XXXXX...XX.X", "XX.XX.X..X.XXXX.XXX...", "......................", "XXX.XXX.X.....X..X..X.", ".....X...X...X...XXX..", "X.X....X.X..X..XXXX.XX" }
Returns: 94