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 Rust (judge verdict: Accepted)

use std::io::Read;
use std::cmp::*;

fn run() {
    let mut s = String::new();
    std::io::stdin().read_to_string(&mut s).unwrap();
    let mut it = s.trim().split_whitespace();
    let h: usize = it.next().unwrap().parse().unwrap();
    let w: usize = it.next().unwrap().parse().unwrap();
    let mut dp = vec![0; w + 1];
    let mut ans = 0;
    for _ in 0..h {
        let mut next = vec![0; w + 1];
        for i in 1..(w + 1) {
            let a: usize = it.next().unwrap().parse().unwrap();
            if a == 0 {
                next[i] = min(next[i - 1], min(dp[i], dp[i - 1])) + 1;
                ans = max(next[i], ans);
            }
        }
        dp = next;
    }
    ans *= ans;
    println!("{}", ans);
}

fn main() {
    run();
}