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)

#include<iostream>
#include<cmath>
using namespace std;
bool hw[1405][1405];
long long dp[1405][1405];
int main()
{
	long long h;
	long long w;
	cin>>h>>w;
	for(long long i=1;i<=h;i++)
	{
		for(long long j=1;j<=w;j++)
		{
			cin>>hw[i][j];
		}
	}
	for(long long i=1;i<=h;i++)
	{
		for(long long j=1;j<=w;j++)
		{
			if(hw[i][j]==0)
				dp[i][j]=1;
			else
				dp[i][j]=0;
		}
	}
	for(long long i=2;i<=h;i++)
	{
		for(long long j=2;j<=w;j++)
		{
			if(hw[i][j]==0)
				dp[i][j]=min(dp[i-1][j],min(dp[i][j-1],dp[i-1][j-1]))+1;
			else
				dp[i][j]=0;
		}
	}
	long long maxx=0;
	for(long long i=1;i<=h;i++)
	{
		for(long long j=1;j<=w;j++)
		{
			
				maxx=max(dp[i][j],maxx);
			
		}
	}
	cout<<maxx*maxx<<endl;
	return 0;
}