Problem Statement
Time limit: 7 seconds.
There is a rectangular building divided into unit square cells. Some of the squares are rooms. The remaining cells are all blocked by various building infrastructure. For simplicity, we will call the blocked cells "walls". Walls are not rooms.
You are given the floor plan of the building in the
We have the option of installing sensors into some of the rooms (at most one sensor per room). Each sensor monitors not just the room it's in but also all rooms that share a side with it.
When a spy enters a room that is monitored by one or more sensors, each of those sensors will report the exact room in which the spy was detected.
An enemy spy will try to infiltrate our building by entering one of its rooms. We know that as soon as this spy enters the chosen room, he will be able to take control of any single sensor that is monitoring that room.
(The spy gets to choose whether he wants to do this and if yes, he gets to choose which one of the nearby sensors he wants to compromise. The sensor is compromised before it gets a chance to make the correct report.)
The spy can change the report of the compromised sensor to any other valid report. That is, he can make the sensor report nothing at all, or he can make the sensor report the presence of the spy in another one of the rooms the compromised sensor monitors.
We say that a building can be protected under these conditions if we can (knowing the information given in the previous paragraph) reliably detect the presence of the spy: whenever the spy enters a room, we must be able to determine that this happened and also determine the exact room where the spy is located.
Determine whether the given building can be protected. Return an empty
Definition
- Class:
- IntruderAlert
- Method:
- placeSensors
- Parameters:
- String[]
- Returns:
- String[]
- Method signature:
- String[] placeSensors(String[] plan)
- (be sure your method is public)
Notes
- Your returned String[] must have walls ('#') exactly in the same places as plan.
- The spy can enter any one room in the building (i.e., any cell denoted '.'), not just those on the boundary of the building.
- The spy knows everything written in the problem statement. We also know everything written in the problem statement and we can use this knowledge to determine the spy's location from the sensors' report.
Constraints
- plan will have between 1 and 5 elements, inclusive.
- Each element of plan will have between 1 and 50 characters, inclusive.
- Each element of plan will have the same number of characters.
- Each character in plan will be '.' or '#'.
- At least one character in plan will be '.'.
Examples
{".."}
Returns: { }
Even if we do place a sensor into each of the rooms, if the spy takes over one of them, we are doomed. For example, the spy may enter one room and have the compromised sensor report that he entered the other room. We now have two sensors, each claiming that the spy is in a different room, and no way to break the symmetry.
{"####", "#..#", "####"}
Returns: { }
Essentially the same test case as in Example 0 but with some extra walls.
{"..", ".."}
Returns: {"SS", "S." }
We can protect this building, but in order to do that we need to place at least three sensors. To show that two sensors are not enough, consider their two different placements. Option 1: .. SS For this sensor placement the spy can enter the room in the top left corner and silence the only adjacent sensor. Option 2: .S S. Here the spy can enter the top left corner, corrupt any one of the two sensors and have the corrupted sensor report the spy in the bottom right corner instead. As in Example 0, we now have two sensors giving us inconsistent information and there is no way to break the symmetry. Three sensors are indeed sufficient. For example, consider the following placement: .S SS If only one sensor reports, we know that another sensor had to be silenced and thus the reporting sensor is correct. If any two sensors agree, their common report is correct. In particular, if the spy is in the bottom right corner, all three sensors see him and even after the sabotage two sensors will still agree. The only remaining option is that we get exactly two reports and they disagree. In that case we know that one of the reporting sensors is corrupted, and thus the spy is in a room that is only monitored by two sensors. There are three mutually distinct options: If the two reporting sensors are bottom left and top right, the spy must be in the top left corner (regardless of what exactly the two sensors report).If they are the two bottom sensors, the spy is in the bottom left corner.And if they are the two sensors on the right, the spy is in the top right corner.
{"......", "......"}
Returns: {"SSS.SS", "S.S.S." }
Here we can already do with significantly fewer than the full twelve sensors.
{"...", ".#.", "..."}
Returns: {".SS", "S#S", "SS." }
{"...#", ".#.#", "...."}
Returns: {"SSS#", "S#.#", ".SSS" }
{"...........##.......", "......##............", ".................#..", "....................", ".....#.#.#.#........"}
Returns: {"SS.S.SS.SS.##S.SS.S.", ".S.S.S##S.S.SS..S.SS", ".S.S..S.S.S.S.S..#..", "SS.SS.S.S.S.S.SSS.SS", ".S.S.#S#S#S#SS..S.S." }
{"..................................................", "..................................................", "..................................................", "..................................................", ".................................................."}
Returns: {".S.S.SS..S.S.SS..S.S.SS..S.S.SS..S.S.SS..S.S.SS.S.", "SS.S.S.SSS.S.S.SSS.S.S.SSS.S.S.SSS.S.S.SSS.S.S.SSS", "...S..S....S..S....S..S....S..S....S..S....S..S...", "SSSSS.S.SSS.S.S.SSS.S.S.SSS.S.S.SSS.S.S.SSS.S.S.SS", ".S..S.S.S..SS.S.S..SS.S.S..SS.S.S..SS.S.S..SS.S.S." }
{".....", ".....", ".....", ".....", "....."}
Returns: {"SS.SS", ".S.S.", ".S.S.", "SS.SS", ".S.S." }
{".....", ".....", "..#..", ".....", "....."}
Returns: {".S.S.", "SS.SS", "..#..", "SS.SS", ".S.S." }
{".....", "..#..", ".....", ".....", "....."}
Returns: {"SS.SS", "S.#S.", ".S.S.", "SS.SS", ".S.S." }
{".....", ".....", "..###", ".....", "....."}
Returns: {".S.SS", "SS.S.", "..###", "SS.SS", ".S.S." }
{".................#................................", "..................................................", "................................................#.", "..................................................", ".................................................."}
Returns: {".S.SS.S.S.SS.S.S.#S.SS.S.SS.S.SS.S.S.S.S.S.S.SS.S.", "SS..S.S.S..S.S.SS.S.S..S..S.S.S..S.S.S.S.S.S.S.SSS", "..S.S.S.SS...S....S...SSS...S...SS.S.S.S.S.S..S.#.", "SSS...S...SSS.SSSS.SSS...SSS.SSS...S...S...SS.S.SS", ".S.SSS.SSS..S.S..S.S..SSS..S.S..SSS.SSS.SSS.S.S.S." }
{"..................................................", "...................#..............................", "........................#......#..................", "..................................................", ".....#............................................"}
Returns: {"S..SSS.S..SSS..S.SS.SS.SS..S.SS.S.S.S.S.S.S.S.S.SS", "SSS..S.SSS...SSS.S.#.S.S.SSS..S.S.S.S.S.S.S.S.S.S.", "...S..S...SSS...S..S..S.#.S.S..#S.S.S.S.S.S.S.S.S.", "SS.SS.S.S..S..S.S.SSS.S.S..SSSS.S.S.S.S.S.S.S.S.SS", ".S.S.#S.SS.S.SS.SS..S.S.SS.S..S.S.S.S.S.S.S.S.S.S." }
{"........................#.........................", ".......................#..........................", "...................................#...#..........", ".......#.#......#.................................", ".................#.............................#.."}
Returns: {".S.SS.S.SS.S.S.S.S.SS.SS#.S.S..S.S.S..S.S.S.S.S.SS", "SS.S..S.S..S.S.S.S..S.S#.SS.SSSS.S.SSSS.S.S.S.S.S.", "...S.SS.S.SS.S.S.SS..S..S..S.....S.#...#S.S.S.S.S.", "SSSSS..#.#...S..#.SS.S.SSS.S.SSSS.S.SSS.S.S.S.S.SS", ".S..S.SSS.SSS.SSS#.S.SS..S.S.S..S.SS..S.S.S.SS.#S." }
{".............#.......................#............", "......................#...........................", "..................................................", "..................................................", "...#.............................................."}
Returns: {".S.SS..S.S.S.#.SS.S.SS.SS.S.S.S.S.SS.#S.S.S.S.S.SS", "SS.S.SSS.S.SS.S.S.S.S.#.S.S.S.S.S.S.S.S.S.S.S.S.S.", "...S.....S...SS...S..SS.S.S.S.S.S.S.S.S.S.S.S.S.S.", "SSS.SSSSS.SS...SSS.S..S.S.S.S.S.S.S.S.S.S.S.S.S.SS", ".S.#.S..S.S.SSS..S.SS.S.S.S.S.S.S.S.S.S.S.S.S.S.S." }
{"..................................#...............", "............#...............................#....#", ".#...........................#....................", "........#.........................................", "............................#...#.......#........."}
Returns: {"SS.S.S.S.S.SS..S.S.SS..S.SS.SS..S.#.S.S.SS.SSS.SSS", "S.SS.S.S.S.S#SSS.S.S.SSS..S.S.SSSS.SS.S.S.S.#.S..#", ".#.S.S.S.S..S....S..S...S..S.#...S..S.SS..S.S.S.S.", "SS.S.S..#.S.S.SSS.S.S.SSSS.S.SSS.SS.S..S.SS.S.S.SS", ".S.S.SSS.SS.S.S..SS.S.S..S.S#.S.#.S.SSS.#.S.S.S.S." }
{".............#.................#..................", "................#..#..............................", "....................................#............#", ".....................#..#................#......#.", "........#...#................................#...."}
Returns: {"SS.S.S.S.S.S.#.S.SS.SS.S.S.S.S.#.S.SS.S.S.S.S.S.SS", ".S.S.S.S.S.SS.SS#S.#.S.S.S.S.SS.SS.S.SS.S.S.S.S.S.", ".S.S.S.S.S..S...S..S..SS.S.S..S...S.#..SS.S.S.SS.#", "SS.S.S.S.SSS.SS.S.SSS#..#.S.S.SSS.S.SS...#S.S.S.#S", ".S.S.SS.#.S.#.S.S.S..SSS.SS.SS..S.S.S.SSS.SS.#S.SS" }
{".........#.#.................#....................", "......#..............#.#..........................", "..................#................#....#.#.......", ".#...#...........#.........#..#...................", "..........#........................#...........#.."}
Returns: {"S.S.SS.S.#S#.S.S..S.S.SSSS.S.#.S.SS.S..S.SS.S.S.SS", "S.S.S.#SS.S.SS.SSSS.S#S#...SS.SS..S.SSSS.S..S.S.S.", "S.S.S.S...S..S..S.#.S...SSS.S..SS..#....#.#SS.S.S.", "S#S..#S.SS.SS.S..#.S.SSS...#.S#S.SS.SSSS.S..S.S.SS", "S.SSS.S.S.#.S.SSS.SS.S..SSS.SS.S.S.#S..S.SS.SS.#S." }
{".....#...........#....#................#.#.#......", "#............#.......#..#.........................", "......#.#............#....#.......................", "......#.#.......#......#...................#......", "..#............................#.................."}
Returns: {"SSSS.#SS.S.SS.SS.#.SSS#.SSS.S.S.S.S.SS.#S#S#S.S.SS", "#.S.S..S.S.S.#.SS.S..#SS#..SS.S.S.S.S.S.S.S.S.S.S.", ".S..SS#.#S..S.S..SSSS#.S.S#..SS.S.S.S.S.S.S.S.S.S.", "SS.SS.#S#.S.S.S.#....S.#.S.S..S.S.S.S.S.S..#S.S.SS", "S.#.S.SS.SS.S.SS.SSS.SS.SS.SSS.#S.S.S.S.SSS.S.S.S." }
{"...........##....#.................#...........#.#", "....##...#..#................#......##............", "...................#....#...#.#......#........#...", ".............#..................#..............#..", "......#..#...........#......#......#.............."}
Returns: {".S.SS.S.SS.##.SSS#.SS.SS.S.SS.SS.S.#SSS..S.S.SS#S#", "SS.S##S.S#S.#SS..SS.S..S.S.S.#.S.SS.##.SSS.S.S.SS.", "...S..S..SSSS..S.S.#.SS.#S..#S#S.S.S.#S....S..#.SS", "SSS.SS.SS....#.S.S.SS.S.S.SS.SS.#..SS.S.SSS.SS.#.S", "S.S.S.#S.#SSS.SS.S.S.#.SS.S.#.S.SSS#S.SS..S.S.SSS." }
{"............#.................#................#..", "...........##...................#.#.#.#.#....#....", ".#.#............#......#..........................", "##..............#............#....................", "......#.##............#..........................."}
Returns: {"S.SS..S.SSSS#S..SS.S..S.S.S.S.#SSS.SSS.SSS.SSS.#SS", "S.S.SSS.S..##SSS.S.SSSS.S.S.SS..#.#.#.#.#.S..#S.S.", "S#.#...S..SS..S.#.S....#S.S.S.SS.S.S.S.SS.S.S.S.S.", "##S.SS.S.SS.S.S.#.S.SSS...S..#.S.S.S.S..S.S.S.S.SS", "SSS.S.#S##.SS.SS.SS.S.#SSS.SSS.S.S.S.SS.S.S.S.S.S." }
{".....##..........#..#.#...........#..#............", "...#...#..................#.......................", ".........#.#..........#...#....##.#..#.....#.....#", "#..............#.....#...##.......................", ".........#........#......#..........##............"}
Returns: {"S.SSS##SS.SS.S.S.#S.#S#.SS.S.SS.S.#S.#.S.SS.SSS.SS", "SS.#.S.#S.S..S.SS.SS.S.S.S#SS.S.SS.SS.SS..S.S..SS.", ".S.S.SS..#.#SS..S..S.S#SS.#..S.##S#..#..S..#S.S..#", "#S.S.S.SS.SS..S#SS.S.#S.S##S.S.S..SSS.SSSSS.S.S.SS", "SS.S.S.S.#.S.SS.S.#SS.SS.#SS.S.SS.S.##.S..S.S.S.S." }
{".........#.....#..#.............#.......#.........", "................................#..#....#.........", ".#................#............#....#...........#.", ".......................#.#..#........#............", "....#.....#...#...##...........#...............#.."}
Returns: {".S.SS.SS.#.S.S.#S.#.S.S.S.S.S.SS#SSSS.SS#S..SSS.S.", "SS..S.S.S.SS.SS.SS.SS.S.S.S.S.S.#..#.SS.#SSS...SSS", ".#SS..S.S..S..S...#..SS.S.S.S..#.SS.#.S.S...SSS.#.", "S..S.SS.SS.SSS.SSS.SS..#.#S.#SS.SS.S.#S.S.S...S.SS", "SSS.#.S.S.#.S.#.S.##S.SSS.SS.S.#.S.SS.S.S.SSSS.#S." }
{"........#...........#..#......................##.#", ".#.....................#.#..#...#..#...#.........#", ".........#............#......................#.#..", ".....................#..........##...##.#.........", ".##..................................#....##..#..."}
Returns: {"SSSS.S.S#.S.S.S.S.S.#SS#S.SS.S..SSS.SSS.SSS.S.##S#", ".#..SS.S.SS.S.S.S.SS.S.#S#S.#SSS#..#.S.#....SSS.S#", "S.S....S.#S.S.S.S..SS.#.S..SS...SSS..S.SSSSS.#S#S.", "S.SSSSS.S.S.S.S.SS...#.S.S..S.S.##.SS##.#S..SS.SSS", "S##.S..SS.S.S.S.S.SSS.SS.SS.S.SSS.SS.#SSS.##S.#.S." }
{"............#..#.....#.............#.#.....#......", "....#.........#......#....................#...#..#", ".##..#..........#......#.......##..#.#...#........", "......#..##.................#......#....###.......", "..#.#............................#.......#...##.#."}
Returns: {".SSS.SS.S.S.#SS#.S.SS#SS.S.SSS.S.S.#S#S.SSS#.S.SSS", "SS..#.S.S.SS.S#SSS.S.#.S.S.S..SS.SS.S.S.S.#.SS#.S#", ".##S.#.SS.S..S..#.S..S.#.S.S.S.##S.#S#SS.#SS..S..S", "SS.SSS#..##.S.SSS.S.SSS.S.S.#S.SS.S#SS..###SS.SS.S", "S.#S#S.SSS.SSS..S.S.S..SS.SS.S.S.#SS..SSS#SS.##S#S" }
{"......#.#.........#....###...........#.#..###.....", ".......................#.#..##................#...", ".#..............#..........#........#.#.#.....#...", "..#..#.................#...#.....#................", "....#..#.........#...#.....#..#...#.#.#.#.#....#.."}
Returns: {"SSS.S.#S#.S.S.S.S.#.SSS###SSS.SS.S.SS#S#S.###SS.SS", "S.S.SS.S.SS.S.S.SS.SS..#S#S.##.S.S.S..SSSSS.SS#SS.", ".#.SS..S....S.S.#S..S.S.S..#.S.S.S..#S#.#..S..#.S.", "S.#S.#S.SSSS.S.SS.S.S.S#SSS#SS.S.#SS.S.SSS.S.SS.SS", "SSS.#SS#.S..SS.S.#SS.#SS.S.#S.#SSS#S#S#S#S#S.S.#S." }
{".......#.##.#...#....#............##........#...##", "#.....#..........#.#...#.......#..##...##......#..", "#.##...........#..#....##........#....#.....#.....", ".......#....#........#.#....#.#..##....#...#.#....", "....##...............................##..##......."}
Returns: {"SS.SSSS#S##S#.S.#SSS.#S.SS.S.SS.SS##SSSS.SS.#SSS##", "#S.S..#SS..S.SSS.#S#S.S#.S.S.S.#S.##.S.##.SS.S.#SS", "#.##.SS..SSS.S.#S.#SS.S##.SS.S.S.#SS..#SS.S.#.S.S.", "SS.SS.S#S...#.S.SSS..#.#.S..#.#S.##SSSS#SS.#S#S.SS", ".S.S##.SS.SSS.SS..S.SSS.SS.SSS.SSS.S.##SS##SS.S.S." }
{"............#......#.#...#....#..#..........#.....", "....#.#.......#.#..##..#.....#...#................", "............#.......#.#.#...........#.........#...", ".#..........#......#.#.......#....#....#....#.....", "#............#.......#.##............#.........#.#"}
Returns: { }
{"....#....#.#........##.##..............#.....#....", "..............#......#....#............###........", "###.#...###..#....................#......#..#....#", "#.#.......#...#........#...##.....#..........##...", ".#..#..#.............#...#........#..............."}
Returns: { }
{"........#.....#.........#.#......#...#.#........##", "#.........##.....................#....##..#..#....", "##....#.#......#.......#..#..#...##.........#.#...", "...#.#....#.#......#...........#....#.........#...", ".................###....#............#..#.#.#....."}
Returns: { }
{".#..#................#..#........#..........#.##.#", "......#........#....#.........#..#.......#...##...", "##....#...#...#........#.#...........##....#......", "......#.#.#.............#...............#.........", ".......#..#...#...#.#...##..#....#.#.##.#......#.."}
Returns: { }
{"."}
Returns: { }
{".",".",".","#","#"}
Returns: {"S", "S", "S", "#", "#" }
{"...#....#.....#......#.......#........#.........#", "#################################################", "..........#...........#............#............."}
Returns: {"SSS#SSSS#SSSSS#SSSSSS#SSS.SSS#SSSS.SSS#SSSSS.SSS#", "#################################################", "SSSSSS.SSS#SSS.SSS.SSS#SSSS.SSS.SSS#SSSSS.SSS.SSS" }
{".#..........#..###....#..........#.............##.", "#......#.......#.............#..........#.......#.", "##...##........#..........#......##..###.....#..#.", "#.#.#.###..........#.###...#...#.###.#......#.....", ".#....##........##.#...#....#....#....#.#.#......."}
Returns: { }
{"..#.#..#.....#.#.............#..##......##....#..#", "....#.#........##..##.......#.##...........#......", "......#...##.#.#..##.#..#.#.#..#.......#..##...#.#", ".....#......#..##.....#..#.#..#.#..#.......#.#..#.", ".....#.......#.##.#.###.#.####...#....#...#..###.#"}
Returns: { }
{".#......................##.#..#...##...#..#.......", ".###.#...#.#..##...#...##.#.#..##..#......#.....##", ".....##.##.#....#......##.#####..#.##..##.#...#..#", ".......###.#.#..##..#...##......##....#........##.", ".#...#.##...##.###.......##........#..###.#..#####"}
Returns: { }
{"..#.#........##.....#####......#....##........##..", "#...##..#..#.#.......###.#.#....###...##.#.##.#...", "..#..###.#........#.##...#....##...#....####.....#", "#..##..#....###......#..##....##.##.#####.#..##...", "#..#...##.##..###...#.#..#..##...#.#.#.......##.#."}
Returns: { }
{"...#..###..#...##..#....#..#.###.##....#..###....#", ".#..#.##...##....#.#....###.#..##..#.####.####...#", ".#.##....#..##.#...###.....#.#.....##.##.##.....#.", "##.##.#####.......##.....##.##.##.#.####..#.....##", "####.####......#.##..#.##...###.#.##..#.#..#..###."}
Returns: { }
{"###...#.#.####..###.##.#.##..###.#......###..#....", "..##.####.##..####.##..#.###.###.###..##..####.#.#", ".##.#...#.#.#####.##.##..##.###.#..###..####.##.##", "##.####.#...##.....#.#.##.##.###.##.#...##...#..#.", "..#.#.#.##..#.#.##.........#.#.###........#.##..#."}
Returns: { }
{"...#...#...#...#...#...#...#...#...#...#...#...#..", ".#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#", ".#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#", ".#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#", ".#...#...#...#...#...#...#...#...#...#...#...#...#"}
Returns: {"SSS#.SS#.SS#.SS#.SS#.SS#.SS#.SS#.SS#.SS#.SS#.SS#SS", ".#S#S#S#S#S#S#S#S#S#S#S#S#S#S#S#S#S#S#S#S#S#S#S#S#", "S#.#S#.#S#.#S#.#S#.#S#.#S#.#S#.#S#.#S#.#S#.#S#.#S#", "S#S#S#S#S#S#S#S#S#S#S#S#S#S#S#S#S#S#S#S#S#S#S#S#S#", "S#SS.#SS.#SS.#SS.#SS.#SS.#SS.#SS.#SS.#SS.#SS.#SS.#" }
{"..................................................", "#################################################.", "................................................#.", ".################################################.", ".................................................."}
Returns: {"SSSS.SSS.SSS.SSS.SSS.SSS.SSS.SSS.SSS.SSS.SSS.SSS.S", "#################################################S", ".SSS.SSS.SSS.SSS.SSS.SSS.SSS.SSS.SSS.SSS.SSS.SSS#S", "S################################################.", "SS.SSS.SSS.SSS.SSS.SSS.SSS.SSS.SSS.SSS.SSS.SSS.SSS" }
{"..................................................", ".#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#", ".#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#", ".#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#", ".#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#"}
Returns: {"S.SSS.SSS.SSS.SSS.SSS.SSS.SSS.SSS.SSS.SSS.SSS.SSSS", "S#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#", "S#S#S#S#S#S#S#S#S#S#S#S#S#S#S#S#S#S#S#S#S#S#S#S#S#", "S#S#S#S#S#S#S#S#S#S#S#S#S#S#S#S#S#S#S#S#S#S#S#S#S#", "S#S#S#S#S#S#S#S#S#S#S#S#S#S#S#S#S#S#S#S#S#S#S#S#S#" }
{"..................................................", ".#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#", "..................................................", ".#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#", ".................................................."}
Returns: {"S.SSS.SSS.SSS.SSS.SSS.SSS.SSS.SSS.SSS.SSS.SSS.SSSS", "S#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#", "S.SSS.SSS.SSS.SSS.SSS.SSS.SSS.SSS.SSS.SSS.SSS.SSSS", "S#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#", "S.SSS.SSS.SSS.SSS.SSS.SSS.SSS.SSS.SSS.SSS.SSS.SSSS" }