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

import java.util.Scanner

object Main extends App { 
  val sc = new Scanner(System.in)
  val H, W = sc.nextInt()
  val area = Array.ofDim[Int](H+1,W+1)
  for (i <- 1 to H; j <- 1 to W) area(i)(j) = 1-sc.nextInt()
  for (i <- 0 to H) area(i)(0) = 0
  for (j <- 0 to W) area(0)(j) = 0

  class Metrix(height:Int, width:Int, area:Array[Array[Int]]) {
    val maxLength = height min width
    def solver():Int = {
      var length = 0
      for (i <- 1 to height; j <- 1 to width) {
        if (area(i)(j) > 0) {
          area(i)(j) = Seq(area(i-1)(j-1),area(i-1)(j),area(i)(j-1)).min+1
          length = length max area(i)(j)
        }
      } 
      length*length
    }
  }

  val mt = new Metrix(H,W,area)
  println(mt.solver())

}