<p>You are given an <code>n x n</code> binary matrix <code>grid</code> where <code>1</code> represents land and <code>0</code> represents water.</p> <p>An <strong>island</strong> is a 4-directionally connected group of <code>1</code>'s not connected to any other <code>1</code>'s. There are <strong>exactly two islands</strong> in <code>grid</code>.</p> <p>You may change <code>0</code>'s to <code>1</code>'s to connect the two islands to form <strong>one island</strong>.</p> <p>Return <em>the smallest number of </em><code>0</code><em>'s you must flip to connect the two islands</em>.</p> <p> </p> <p><strong>Example 1:</strong></p> <pre> <strong>Input:</strong> grid = [[0,1],[1,0]] <strong>Output:</strong> 1 </pre> <p><strong>Example 2:</strong></p> <pre> <strong>Input:</strong> grid = [[0,1,0],[0,0,0],[0,0,1]] <strong>Output:</strong> 2 </pre> <p><strong>Example 3:</strong></p> <pre> <strong>Input:</strong> grid = [[1,1,1,1,1],[1,0,0,0,1],[1,0,1,0,1],[1,0,0,0,1],[1,1,1,1,1]] <strong>Output:</strong> 1 </pre> <p> </p> <p><strong>Constraints:</strong></p> <ul> <li><code>n == grid.length == grid[i].length</code></li> <li><code>2 <= n <= 100</code></li> <li><code>grid[i][j]</code> is either <code>0</code> or <code>1</code>.</li> <li>There are exactly two islands in <code>grid</code>.</li> </ul>