acm International Collegiate Programming Contest

Links

A B C D E F G H

Problem F

井の中の蛙

h × w の等間隔の格子点があり,上から r 番目,左から c 番目の位置を (r, c) とする (1 ≤ r ≤ h, 1 ≤ c ≤ w).各格子点上に1匹ずつ蛙がいる.各々の蛙は強さが数値化されており,位置 (r, c) にいる蛙の強さは fr, c である.だが,彼らはみな,自分が世界で一番強いと思っている井の中の蛙である.彼らは自分より強い蛙がいない範囲を直感的に把握しており,その範囲内のみで活動することによりそのアイデンティティを保っている.

位置 (r1, c1) と位置 (r2, c2) との距離を |r1 - r2| + |c1 - c2| と定義する.このとき,位置 (r, c) にいる蛙は,距離 d 以内に自分より厳密に強い蛙がいないければ,この範囲で活動できる.すなわち,|r - i| + |c - j| ≤ d を満たすすべての 1 ≤ i ≤ h, 1 ≤ j ≤ w について,fi, j ≤ fr, c であれば,位置 (r, c) にいる蛙は距離 d の範囲で活動できる.

格子上の蛙たちがどれだけ井の中の蛙なのかの度合い,通称「井度」を把握するため,あなたにプログラムの作成依頼が飛び込んだ.各距離 d = 1, 2, ..., h + w - 2 について,距離 d の範囲で活動可能な蛙の数を求めるプログラムを作成し,あなたがプログラミング界の井の中の蛙ではないことを証明しよう.

Input

入力は複数のデータセットからなる. 各データセットは次の形式で表される.

h w f1,1 f1,2 ... f1,w f2,1 f2,2 ... f2,w ... fh,1 fh,2 ... fh,w

入力の 1 行目は格子の大きさを表す 2 つの整数 hw からなり, 1 ≤ h ≤ 1,0001 ≤ w ≤ 1,000h + w ≥ 3 を満たす.続く h 行は各行 w 個の整数からなり,各蛙の強さの情報である.r 行目の c 番目の整数は位置 (r, c) の蛙の強さ fr, c を表す.各 fr, c はいずれも 1 以上 109 以下である.

入力の終わりは 2 つのゼロからなる行で表される. 入力に含まれるデータセットは 50 個以内である.

Output

各データセットに対して,h + w - 2 個の整数を空白区切りで 1 行に出力せよ.ここで,行内の i 番目の整数は,距離 i 以内に自分より強い蛙が存在しないような蛙の数である.

Sample Input

4 5
9 1 1 1 3
5 2 1 3 1
6 4 1 1 2
4 4 3 2 8
7 5
24 18 10 34 43
37 26 42 49 27
10 41 3 19 29
31 4 10 32 42
44 25 41 14 28
36 21 25 30 40
1 43 8 40 44
3 3
1 1 1
1 1 1
1 1 1
1 9
1 2 3 4 5 4 3 2 1
0 0

Sample Output

7 4 2 2 2 2 1
9 5 3 3 3 1 1 1 1 1
9 9 9 9
1 1 1 1 1 1 1 1
(End of Problem F) A B C D E F G H