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 <stdio.h>
#define SIZ 1400
#define min(x,y) y ^ ( ( x^y ) & ( x-y >> 31 ) )
#define max(x,y) y ^ ( ( x^y ) & ( y-x >> 31 ) )
int A[SIZ][SIZ];
int m[SIZ][SIZ];
int main(){
	int i,j,k,x,y,r,M=0,t=0,z;
	scanf("%d%d",&y,&x);
	for(j=0;j<y;j++)for(i=0;i<x;i++)scanf("%d",A[j]+i);
	for(j=0;j<y;j++)for(r=i=0;i<x;m[j][i]=r,i++)r=A[j][i]==0?r+1:0;
	for(r=i=0;i<x;i++)for(j=0;j<y;j++)for(M=x,k=j;k<y;k++){
		if(M>m[k][i])M=m[k][i];
		int z=k-j+1;
		if(M<z)break;
		if(r<z)r=z;
	}
	printf("%d\n",r*r);
	return 0;
}