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 H 1400
#define W 1400
#define MAX(a, b) ((a) > (b) ? (a) : (b))
#define MIN(a, b) ((a) < (b) ? (a) : (b))
#define MIN3(a, b, c) ((a) < (MIN(b, c)) ? (a) : (MIN(b, c)))

int a[H][W];

int solve(int h,int w){
	int dp[h][w];
	int max=-1;
	
	for(int i=0;i<h;i++){
		for(int j=0;j<w;j++){
			dp[i][j]=0;
		}
	}
	
	for(int i=0;i<h;i++){
		for(int j=0;j<w;j++){
			if(a[i][j]==1)
				dp[i][j]=0;
			else if(i==0 || j==0)
				dp[i][j]=!a[i][j];
			else 
				dp[i][j]=MIN3(dp[i-1][j-1],dp[i-1][j],dp[i][j-1])+1;
			
			max=MAX(dp[i][j],max);
			
		}
	}
	
	return max*max;
}


int main(){
	int h,w;
	
	scanf("%d %d",&h,&w);
	
	for(int i=0;i<h;i++){
		for(int j=0;j<w;j++){
			scanf("%d",&a[i][j]);
		}
	}
	
	printf("%d\n",solve(h,w));
	
	return 0;
	
}