Given a `m x n`

binary matrix `mat`

. In one step, you can choose one cell and flip it and all the four neighbors of it if they exist (Flip is changing `1`

to `0`

and `0`

to `1`

). A pair of cells are called neighbors if they share one edge.

Return the *minimum number of steps* required to convert `mat`

to a zero matrix or `-1`

if you cannot.

A **binary matrix** is a matrix with all cells equal to `0`

or `1`

only.

A **zero matrix** is a matrix with all cells equal to `0`

.

**Example 1:**

Input:mat = [[0,0],[0,1]]Output:3Explanation:One possible solution is to flip (1, 0) then (0, 1) and finally (1, 1) as shown.

**Example 2:**

Input:mat = [[0]]Output:0Explanation:Given matrix is a zero matrix. We don't need to change it.

**Example 3:**

Input:mat = [[1,1,1],[1,0,1],[0,0,0]]Output:6

**Example 4:**

Input:mat = [[1,0,0],[1,0,0]]Output:-1Explanation:Given matrix can't be a zero matrix

**Constraints:**

`m == mat.length`

`n == mat[i].length`

`1 <= m, n <= 3`

`mat[i][j]`

is either`0`

or`1`

.

class Solution {
public int minFlips(int[][] mat) {
}
}