Problem:
Largest Square

Given a matrix (H × W) which contains only 1 and 0, find the area of the largest square matrix which only contains 0s.

Input

H W
c1,1 c1,2 ... c1,W
c2,1 c2,2 ... c2,W
:
cH,1 cH,2 ... cH,W

In the first line, two integers H and W separated by a space character are given. In the following H lines, ci,j, elements of the H × W matrix, are given.

Output

Print the area (the number of 0s) of the largest square.

Constraints

1 ≤ H, W ≤ 1,400

Sample Input

4 5
0 0 1 0 0
1 0 0 0 0
0 0 0 1 0
0 0 0 1 0

Sample Output

4

Solution in C# (judge verdict: Accepted)

using static System.Math;
using System;

public class hello
{
    public static void Main()
    {
        string[] line = Console.ReadLine().Trim().Split(' ');
        var h = int.Parse(line[0]);
        var w = int.Parse(line[1]);
        var a = new bool[h, w];
        for (int i = 0; i < h; i++)
        {
            line = Console.ReadLine().Trim().Split(' ');
            for (int j = 0; j < w; j++)
                if (line[j] == "1") a[i, j] = true;
        }
        var ans = goDP(a, h, w);
        Console.WriteLine(ans * ans);
    }
    static int goDP(bool[,] a, int h, int w)
    {
        var dp = new int[h, w];
        var ans = 0;
        for (int i = 0; i < h; i++)
            if (!a[i, 0]) { dp[i, 0] = 1; ans = 1; }
        for (int i = 1; i < w; i++)
            if (!a[0, i]) { dp[0, i] = 1; ans = 1; }
        if (h == 1 | w == 1) return ans;
        for (int i = 1; i < h; i++)
            for (int j = 1; j < w; j++)
            {
                if (a[i, j]) dp[i, j] = 0;
                else dp[i, j] = Min(dp[i, j - 1], Min(dp[i - 1, j], dp[i - 1, j - 1])) + 1;
                ans = Max(ans, dp[i, j]);
            }
        return ans;
    }
}