func maximalSquare(matrix [][]byte) int {
n := len(matrix)
m := len(matrix[0])
f := make([][]int, n + 1)
ans := 0
for i := 0; i <= n; i ++ {
f[i] = make([]int, m + 1)
f[i][0] = 0
}
for i := 0; i <= m; i ++ {
f[0][i] = 0
}
for i := 1; i <= n; i ++ {
for j := 1; j <= m; j ++ {
if matrix[i - 1][j - 1] == '1' {
f[i][j] = min(f[i - 1][j] + 1, f[i][j - 1] + 1, f[i - 1][j - 1] + 1)
ans = max(ans, f[i][j])
}
}
}
return ans*ans
}