# Switch the colour of the largest non-unique connected shape

Given a rectangular grid of square cells, find the non-unique connected shapes with the largest area, and switch their colour

# Input

* A rectangular grid of cells, each of which has 1 of 2 distinct values ("colours")
* You can choose to accept any of
 - an image with only 2 distinct pixel colours
 - text with only 2 distinct characters (also allowing newlines for forming a rectangle)
 - a 2d array, with each element having 1 of 2 distinct values
 - a 1d array, plus a width and/or height

The 2 distinct values will be referred to as "colours", but the rules apply similarly for all of the permitted formats

# Output

* A rectangular grid of cells in the same format as the input, using the same 2 colours
* For each shape required to be changed, all of its cells have been switched to the other colour

# Rules

* Each cell is part of a connected shape, which contains all cells of the same colour that can be reached by a path made up only of vertical or horizontal steps to adjacent cells of the same colour (no diagonal steps)
* The grid does not wrap: a shape cannot be connected across the outer boundary
* A shape is ***identical*** to another if it can be made to coincide exactly with it by any combination of
 - translation
 - rotation by an integer multiple of 90 degrees
 - reflection in any vertical or horizontal line
 - switching its colour
* A shape is ***unique*** if no other shape is identical to it
* The ***area*** of a shape is the number of cells it contains
* The shapes to be changed are those with the largest area, of those that are non-unique
* If 2 or more distinct shapes are non-unique and have the largest area, all instances of each distinct shape must be changed
* If there are no non-unique shapes, the output is the same as the input
* A grid (input or output) may sometimes contain only 1 of the 2 colours
 
# Test cases

Each test case is an input followed by its unique correct output

```
.  .

..  ..

.#  #.

.#  .#
..  ..

.#  #.
#.  .#

..#  ...
...  ...
.#.  ...

.......  .......
##.....  .......
#.....#  .......
.....##  .......

....##.  ....##.
##..##.  ....##.
#.....#  .......
.....##  .......

#.....###.  ..........
#.......#.  ..........
##...##...  ..........
.....##...  ..........
##........  ..........
##..####..  ....####..

.......###  .......###
..##..####  ......####
..#..###.#  .....#####
....###..#  ....######
...#######  ...#######

.......###  #######...
.##...####  ######....
.#...###.#  #####.....
....###..#  ####......
...#######  ###.......

........####  ########....
.###...#...#  #######.....
.#..#.#.##.#  ##..##..##..
.###.###...#  #####.......
....########  ####........

........####  ########....
.###...#...#  #######.....
.#..#.#....#  ##..##......
.###.###...#  #####.......
....########  ####........
```

The same test cases with colour coding for human reading (click image for larger version):

[![test cases with colour coding][test_cases_small]][test_cases_large]

# Scoring

This is [tag:code-golf]. Your score is the number of bytes in your source code. For each language, the code with the lowest score wins

---

# Sandbox thoughts

* Any important/useful test cases welcome
* Is there a more useful format for 2d test cases?
* Are there 2 distinct characters that would make human reading easier?
* Is this a duplicate?
* Can anything be made clearer or more succinct?
* I'm also trying to think of a better name


  [test_cases_small]: https://i.sstatic.net/c6JLMm.png
  [test_cases_large]: https://i.sstatic.net/c6JLM.png