const maxn = 700;
var n,m:word;
a: array[0..maxn+1,0..maxn+1] of word;
visit: array[0..maxn+1,0..maxn+1] of boolean;
procedure enter;
var i,j:word;
begin
readln(n,m);
for i:=1 to n do
begin
for j:=1 to m do
begin
read(a[i,j]);
visit[i,j]:=false;
end;
readln;
end;
end;
function dfs(x,y:word):boolean;
var p,pp:boolean;
begin
p:=true;
visit[x,y]:=true;
if (x>1) and (a[x-1,y]>a[x,y]) then p:=false;
if p and (x<n) and (a[x+1,y]>a[x,y]) then p:=false;
if p and (y>1) and (a[x,y-1]>a[x,y]) then p:=false;
if p and (y<m) and (a[x,y+1]>a[x,y]) then p:=false;
if p and (x>1) and (y>1) and (a[x-1,y-1]>a[x,y]) then p:=false;
if p and (x>1) and (y<m) and (a[x-1,y+1]>a[x,y]) then p:=false;
if p and (x<n) and (y>1) and (a[x+1,y-1]>a[x,y]) then p:=false;
if p and (x<n) and (y<m) and (a[x+1,y+1]>a[x,y]) then p:=false;
if not p then
begin
dfs:=p;
if (x>1) and (a[x-1,y]=a[x,y]) and (not visit[x-1,y]) then dfs(x-1,y);
if (x<n) and (a[x+1,y]=a[x,y]) and (not visit[x+1,y]) then dfs(x+1,y);
if (y>1) and (a[x,y-1]=a[x,y]) and (not visit[x,y-1]) then dfs(x,y-1);
if (y<m) and (a[x,y+1]=a[x,y]) and (not visit[x,y+1]) then dfs(x,y+1);
if (x>1) and (y>1) and (a[x-1,y-1]=a[x,y]) and (not visit[x-1,y-1]) then dfs(x-1,y-1);
if (x>1) and (y<m) and (a[x-1,y+1]=a[x,y]) and (not visit[x-1,y+1]) then dfs(x-1,y+1);
if (x<n) and (y>1) and (a[x+1,y-1]=a[x,y]) and (not visit[x+1,y-1]) then dfs(x+1,y-1);
if (x<n) and (y<m) and (a[x+1,y+1]=a[x,y]) and (not visit[x+1,y+1]) then dfs(x+1,y+1);
end;
if (x>1) and (a[x-1,y]=a[x,y]) and (not visit[x-1,y]) then p:=p and dfs(x-1,y);
if not p then
begin
dfs:=p;
if (x<n) and (a[x+1,y]=a[x,y]) and (not visit[x+1,y]) then dfs(x+1,y);
if (y>1) and (a[x,y-1]=a[x,y]) and (not visit[x,y-1]) then dfs(x,y-1);
if (y<m) and (a[x,y+1]=a[x,y]) and (not visit[x,y+1]) then dfs(x,y+1);
if (x>1) and (y>1) and (a[x-1,y-1]=a[x,y]) and (not visit[x-1,y-1]) then dfs(x-1,y-1);
if (x>1) and (y<m) and (a[x-1,y+1]=a[x,y]) and (not visit[x-1,y+1]) then dfs(x-1,y+1);
if (x<n) and (y>1) and (a[x+1,y-1]=a[x,y]) and (not visit[x+1,y-1]) then dfs(x+1,y-1);
if (x<n) and (y<m) and (a[x+1,y+1]=a[x,y]) and (not visit[x+1,y+1]) then dfs(x+1,y+1);
end;
if (x<n) and (a[x+1,y]=a[x,y]) and (not visit[x+1,y]) then p:=p and dfs(x+1,y);
if not p then
begin
dfs:=p;
if (y>1) and (a[x,y-1]=a[x,y]) and (not visit[x,y-1]) then dfs(x,y-1);
if (y<m) and (a[x,y+1]=a[x,y]) and (not visit[x,y+1]) then dfs(x,y+1);
if (x>1) and (y>1) and (a[x-1,y-1]=a[x,y]) and (not visit[x-1,y-1]) then dfs(x-1,y-1);
if (x>1) and (y<m) and (a[x-1,y+1]=a[x,y]) and (not visit[x-1,y+1]) then dfs(x-1,y+1);
if (x<n) and (y>1) and (a[x+1,y-1]=a[x,y]) and (not visit[x+1,y-1]) then dfs(x+1,y-1);
if (x<n) and (y<m) and (a[x+1,y+1]=a[x,y]) and (not visit[x+1,y+1]) then dfs(x+1,y+1);
end;
if (y>1) and (a[x,y-1]=a[x,y]) and (not visit[x,y-1]) then p:=p and dfs(x,y-1);
if not p then
begin
dfs:=p;
if (y<m) and (a[x,y+1]=a[x,y]) and (not visit[x,y+1]) then dfs(x,y+1);
if (x>1) and (y>1) and (a[x-1,y-1]=a[x,y]) and (not visit[x-1,y-1]) then dfs(x-1,y-1);
if (x>1) and (y<m) and (a[x-1,y+1]=a[x,y]) and (not visit[x-1,y+1]) then dfs(x-1,y+1);
if (x<n) and (y>1) and (a[x+1,y-1]=a[x,y]) and (not visit[x+1,y-1]) then dfs(x+1,y-1);
if (x<n) and (y<m) and (a[x+1,y+1]=a[x,y]) and (not visit[x+1,y+1]) then dfs(x+1,y+1);
end;
if (y<m) and (a[x,y+1]=a[x,y]) and (not visit[x,y+1]) then p:=p and dfs(x,y+1);
if not p then
begin
dfs:=p;
if (x>1) and (y>1) and (a[x-1,y-1]=a[x,y]) and (not visit[x-1,y-1]) then dfs(x-1,y-1);
if (x>1) and (y<m) and (a[x-1,y+1]=a[x,y]) and (not visit[x-1,y+1]) then dfs(x-1,y+1);
if (x<n) and (y>1) and (a[x+1,y-1]=a[x,y]) and (not visit[x+1,y-1]) then dfs(x+1,y-1);
if (x<n) and (y<m) and (a[x+1,y+1]=a[x,y]) and (not visit[x+1,y+1]) then dfs(x+1,y+1);
end;
if (x>1) and (y>1) and (a[x-1,y-1]=a[x,y]) and (not visit[x-1,y-1]) then p:=p and dfs(x-1,y-1);
if not p then
begin
dfs:=p;
if (x>1) and (y<m) and (a[x-1,y+1]=a[x,y]) and (not visit[x-1,y+1]) then dfs(x-1,y+1);
if (x<n) and (y>1) and (a[x+1,y-1]=a[x,y]) and (not visit[x+1,y-1]) then dfs(x+1,y-1);
if (x<n) and (y<m) and (a[x+1,y+1]=a[x,y]) and (not visit[x+1,y+1]) then dfs(x+1,y+1);
end;
if (x>1) and (y<m) and (a[x-1,y+1]=a[x,y]) and (not visit[x-1,y+1]) then p:=p and dfs(x-1,y+1);
if not p then
begin
dfs:=p;
if (x<n) and (y>1) and (a[x+1,y-1]=a[x,y]) and (not visit[x+1,y-1]) then dfs(x+1,y-1);
if (x<n) and (y<m) and (a[x+1,y+1]=a[x,y]) and (not visit[x+1,y+1]) then dfs(x+1,y+1);
end;
if (x<n) and (y>1) and (a[x+1,y-1]=a[x,y]) and (not visit[x+1,y-1]) then p:=p and dfs(x+1,y-1);
if not p then
begin
dfs:=p;
if (x<n) and (y<m) and (a[x+1,y+1]=a[x,y]) and (not visit[x+1,y+1]) then dfs(x+1,y+1);
end;
if (x<n) and (y<m) and (a[x+1,y+1]=a[x,y]) and (not visit[x+1,y+1]) then p:=p and dfs(x+1,y+1);
dfs:=p;
end;
procedure initvisit;
var i,j:word;
begin
for i:=1 to n do
for j:=1 to m do
visit[i,j]:=false;
end;
procedure printvisit;
var i,j:word;
begin
for i:=1 to n do
begin
for j:=1 to m do
write(visit[i,j]:5,' ');
writeln;
end;
end;
procedure solve;
var i,j,res:word;
p:boolean;
begin
res:=0;
for i:=1 to n do
for j:=1 to m do
if not visit[i,j] then
if dfs(i,j) then
begin
inc(res);
end;
writeln(res);
end;
begin
enter;
solve;
end.
Y29uc3QgbWF4biA9IDcwMDsKdmFyIG4sbTp3b3JkOwogICAgYTogYXJyYXlbMC4ubWF4bisxLDAuLm1heG4rMV0gb2Ygd29yZDsKICAgIHZpc2l0OiBhcnJheVswLi5tYXhuKzEsMC4ubWF4bisxXSBvZiBib29sZWFuOwpwcm9jZWR1cmUgZW50ZXI7CnZhciBpLGo6d29yZDsKYmVnaW4KICByZWFkbG4obixtKTsKICBmb3IgaTo9MSB0byBuIGRvCiAgYmVnaW4KICAgIGZvciBqOj0xIHRvIG0gZG8KICAgIGJlZ2luCiAgICAgIHJlYWQoYVtpLGpdKTsKICAgICAgdmlzaXRbaSxqXTo9ZmFsc2U7CiAgICBlbmQ7CiAgICByZWFkbG47CiAgZW5kOwplbmQ7CmZ1bmN0aW9uIGRmcyh4LHk6d29yZCk6Ym9vbGVhbjsKdmFyIHAscHA6Ym9vbGVhbjsKYmVnaW4KICBwOj10cnVlOwogIHZpc2l0W3gseV06PXRydWU7CiAgaWYgKHg+MSkgYW5kIChhW3gtMSx5XT5hW3gseV0pIHRoZW4gcDo9ZmFsc2U7CiAgaWYgcCBhbmQgKHg8bikgYW5kIChhW3grMSx5XT5hW3gseV0pIHRoZW4gcDo9ZmFsc2U7CiAgaWYgcCBhbmQgKHk+MSkgYW5kIChhW3gseS0xXT5hW3gseV0pIHRoZW4gcDo9ZmFsc2U7CiAgaWYgcCBhbmQgKHk8bSkgYW5kIChhW3gseSsxXT5hW3gseV0pIHRoZW4gcDo9ZmFsc2U7CiAgaWYgcCBhbmQgKHg+MSkgYW5kICh5PjEpIGFuZCAoYVt4LTEseS0xXT5hW3gseV0pIHRoZW4gcDo9ZmFsc2U7CiAgaWYgcCBhbmQgKHg+MSkgYW5kICh5PG0pIGFuZCAoYVt4LTEseSsxXT5hW3gseV0pIHRoZW4gcDo9ZmFsc2U7CiAgaWYgcCBhbmQgKHg8bikgYW5kICh5PjEpIGFuZCAoYVt4KzEseS0xXT5hW3gseV0pIHRoZW4gcDo9ZmFsc2U7CiAgaWYgcCBhbmQgKHg8bikgYW5kICh5PG0pIGFuZCAoYVt4KzEseSsxXT5hW3gseV0pIHRoZW4gcDo9ZmFsc2U7CiAgaWYgbm90IHAgdGhlbgogIGJlZ2luCiAgICBkZnM6PXA7CiAgICBpZiAoeD4xKSBhbmQgKGFbeC0xLHldPWFbeCx5XSkgYW5kIChub3QgdmlzaXRbeC0xLHldKSB0aGVuIGRmcyh4LTEseSk7CiAgICBpZiAoeDxuKSBhbmQgKGFbeCsxLHldPWFbeCx5XSkgYW5kIChub3QgdmlzaXRbeCsxLHldKSB0aGVuIGRmcyh4KzEseSk7CiAgICBpZiAoeT4xKSBhbmQgKGFbeCx5LTFdPWFbeCx5XSkgYW5kIChub3QgdmlzaXRbeCx5LTFdKSB0aGVuIGRmcyh4LHktMSk7CiAgICBpZiAoeTxtKSBhbmQgKGFbeCx5KzFdPWFbeCx5XSkgYW5kIChub3QgdmlzaXRbeCx5KzFdKSB0aGVuIGRmcyh4LHkrMSk7CiAgICBpZiAoeD4xKSBhbmQgKHk+MSkgYW5kIChhW3gtMSx5LTFdPWFbeCx5XSkgYW5kIChub3QgdmlzaXRbeC0xLHktMV0pIHRoZW4gZGZzKHgtMSx5LTEpOwogICAgaWYgKHg+MSkgYW5kICh5PG0pIGFuZCAoYVt4LTEseSsxXT1hW3gseV0pIGFuZCAobm90IHZpc2l0W3gtMSx5KzFdKSB0aGVuIGRmcyh4LTEseSsxKTsKICAgIGlmICh4PG4pIGFuZCAoeT4xKSBhbmQgKGFbeCsxLHktMV09YVt4LHldKSBhbmQgKG5vdCB2aXNpdFt4KzEseS0xXSkgdGhlbiBkZnMoeCsxLHktMSk7CiAgICBpZiAoeDxuKSBhbmQgKHk8bSkgYW5kIChhW3grMSx5KzFdPWFbeCx5XSkgYW5kIChub3QgdmlzaXRbeCsxLHkrMV0pIHRoZW4gZGZzKHgrMSx5KzEpOwogIGVuZDsKICBpZiAoeD4xKSBhbmQgKGFbeC0xLHldPWFbeCx5XSkgYW5kIChub3QgdmlzaXRbeC0xLHldKSB0aGVuIHA6PXAgYW5kIGRmcyh4LTEseSk7CiAgaWYgbm90IHAgdGhlbgogIGJlZ2luCiAgICBkZnM6PXA7CiAgICBpZiAoeDxuKSBhbmQgKGFbeCsxLHldPWFbeCx5XSkgYW5kIChub3QgdmlzaXRbeCsxLHldKSB0aGVuIGRmcyh4KzEseSk7CiAgICBpZiAoeT4xKSBhbmQgKGFbeCx5LTFdPWFbeCx5XSkgYW5kIChub3QgdmlzaXRbeCx5LTFdKSB0aGVuIGRmcyh4LHktMSk7CiAgICBpZiAoeTxtKSBhbmQgKGFbeCx5KzFdPWFbeCx5XSkgYW5kIChub3QgdmlzaXRbeCx5KzFdKSB0aGVuIGRmcyh4LHkrMSk7CiAgICBpZiAoeD4xKSBhbmQgKHk+MSkgYW5kIChhW3gtMSx5LTFdPWFbeCx5XSkgYW5kIChub3QgdmlzaXRbeC0xLHktMV0pIHRoZW4gZGZzKHgtMSx5LTEpOwogICAgaWYgKHg+MSkgYW5kICh5PG0pIGFuZCAoYVt4LTEseSsxXT1hW3gseV0pIGFuZCAobm90IHZpc2l0W3gtMSx5KzFdKSB0aGVuIGRmcyh4LTEseSsxKTsKICAgIGlmICh4PG4pIGFuZCAoeT4xKSBhbmQgKGFbeCsxLHktMV09YVt4LHldKSBhbmQgKG5vdCB2aXNpdFt4KzEseS0xXSkgdGhlbiBkZnMoeCsxLHktMSk7CiAgICBpZiAoeDxuKSBhbmQgKHk8bSkgYW5kIChhW3grMSx5KzFdPWFbeCx5XSkgYW5kIChub3QgdmlzaXRbeCsxLHkrMV0pIHRoZW4gZGZzKHgrMSx5KzEpOwogIGVuZDsKICBpZiAoeDxuKSBhbmQgKGFbeCsxLHldPWFbeCx5XSkgYW5kIChub3QgdmlzaXRbeCsxLHldKSB0aGVuIHA6PXAgYW5kIGRmcyh4KzEseSk7CiAgaWYgbm90IHAgdGhlbgogIGJlZ2luCiAgICBkZnM6PXA7CiAgICBpZiAoeT4xKSBhbmQgKGFbeCx5LTFdPWFbeCx5XSkgYW5kIChub3QgdmlzaXRbeCx5LTFdKSB0aGVuIGRmcyh4LHktMSk7CiAgICBpZiAoeTxtKSBhbmQgKGFbeCx5KzFdPWFbeCx5XSkgYW5kIChub3QgdmlzaXRbeCx5KzFdKSB0aGVuIGRmcyh4LHkrMSk7CiAgICBpZiAoeD4xKSBhbmQgKHk+MSkgYW5kIChhW3gtMSx5LTFdPWFbeCx5XSkgYW5kIChub3QgdmlzaXRbeC0xLHktMV0pIHRoZW4gZGZzKHgtMSx5LTEpOwogICAgaWYgKHg+MSkgYW5kICh5PG0pIGFuZCAoYVt4LTEseSsxXT1hW3gseV0pIGFuZCAobm90IHZpc2l0W3gtMSx5KzFdKSB0aGVuIGRmcyh4LTEseSsxKTsKICAgIGlmICh4PG4pIGFuZCAoeT4xKSBhbmQgKGFbeCsxLHktMV09YVt4LHldKSBhbmQgKG5vdCB2aXNpdFt4KzEseS0xXSkgdGhlbiBkZnMoeCsxLHktMSk7CiAgICBpZiAoeDxuKSBhbmQgKHk8bSkgYW5kIChhW3grMSx5KzFdPWFbeCx5XSkgYW5kIChub3QgdmlzaXRbeCsxLHkrMV0pIHRoZW4gZGZzKHgrMSx5KzEpOwogIGVuZDsKICBpZiAoeT4xKSBhbmQgKGFbeCx5LTFdPWFbeCx5XSkgYW5kIChub3QgdmlzaXRbeCx5LTFdKSB0aGVuIHA6PXAgYW5kIGRmcyh4LHktMSk7CiAgaWYgbm90IHAgdGhlbgogIGJlZ2luCiAgICBkZnM6PXA7CiAgICBpZiAoeTxtKSBhbmQgKGFbeCx5KzFdPWFbeCx5XSkgYW5kIChub3QgdmlzaXRbeCx5KzFdKSB0aGVuIGRmcyh4LHkrMSk7CiAgICBpZiAoeD4xKSBhbmQgKHk+MSkgYW5kIChhW3gtMSx5LTFdPWFbeCx5XSkgYW5kIChub3QgdmlzaXRbeC0xLHktMV0pIHRoZW4gZGZzKHgtMSx5LTEpOwogICAgaWYgKHg+MSkgYW5kICh5PG0pIGFuZCAoYVt4LTEseSsxXT1hW3gseV0pIGFuZCAobm90IHZpc2l0W3gtMSx5KzFdKSB0aGVuIGRmcyh4LTEseSsxKTsKICAgIGlmICh4PG4pIGFuZCAoeT4xKSBhbmQgKGFbeCsxLHktMV09YVt4LHldKSBhbmQgKG5vdCB2aXNpdFt4KzEseS0xXSkgdGhlbiBkZnMoeCsxLHktMSk7CiAgICBpZiAoeDxuKSBhbmQgKHk8bSkgYW5kIChhW3grMSx5KzFdPWFbeCx5XSkgYW5kIChub3QgdmlzaXRbeCsxLHkrMV0pIHRoZW4gZGZzKHgrMSx5KzEpOwogIGVuZDsKICBpZiAoeTxtKSBhbmQgKGFbeCx5KzFdPWFbeCx5XSkgYW5kIChub3QgdmlzaXRbeCx5KzFdKSB0aGVuIHA6PXAgYW5kIGRmcyh4LHkrMSk7CiAgaWYgbm90IHAgdGhlbgogIGJlZ2luCiAgICBkZnM6PXA7CiAgICBpZiAoeD4xKSBhbmQgKHk+MSkgYW5kIChhW3gtMSx5LTFdPWFbeCx5XSkgYW5kIChub3QgdmlzaXRbeC0xLHktMV0pIHRoZW4gZGZzKHgtMSx5LTEpOwogICAgaWYgKHg+MSkgYW5kICh5PG0pIGFuZCAoYVt4LTEseSsxXT1hW3gseV0pIGFuZCAobm90IHZpc2l0W3gtMSx5KzFdKSB0aGVuIGRmcyh4LTEseSsxKTsKICAgIGlmICh4PG4pIGFuZCAoeT4xKSBhbmQgKGFbeCsxLHktMV09YVt4LHldKSBhbmQgKG5vdCB2aXNpdFt4KzEseS0xXSkgdGhlbiBkZnMoeCsxLHktMSk7CiAgICBpZiAoeDxuKSBhbmQgKHk8bSkgYW5kIChhW3grMSx5KzFdPWFbeCx5XSkgYW5kIChub3QgdmlzaXRbeCsxLHkrMV0pIHRoZW4gZGZzKHgrMSx5KzEpOwogIGVuZDsKICBpZiAoeD4xKSBhbmQgKHk+MSkgYW5kIChhW3gtMSx5LTFdPWFbeCx5XSkgYW5kIChub3QgdmlzaXRbeC0xLHktMV0pIHRoZW4gcDo9cCBhbmQgZGZzKHgtMSx5LTEpOwogIGlmIG5vdCBwIHRoZW4KICBiZWdpbgogICAgZGZzOj1wOwogICAgaWYgKHg+MSkgYW5kICh5PG0pIGFuZCAoYVt4LTEseSsxXT1hW3gseV0pIGFuZCAobm90IHZpc2l0W3gtMSx5KzFdKSB0aGVuIGRmcyh4LTEseSsxKTsKICAgIGlmICh4PG4pIGFuZCAoeT4xKSBhbmQgKGFbeCsxLHktMV09YVt4LHldKSBhbmQgKG5vdCB2aXNpdFt4KzEseS0xXSkgdGhlbiBkZnMoeCsxLHktMSk7CiAgICBpZiAoeDxuKSBhbmQgKHk8bSkgYW5kIChhW3grMSx5KzFdPWFbeCx5XSkgYW5kIChub3QgdmlzaXRbeCsxLHkrMV0pIHRoZW4gZGZzKHgrMSx5KzEpOwogIGVuZDsKICBpZiAoeD4xKSBhbmQgKHk8bSkgYW5kIChhW3gtMSx5KzFdPWFbeCx5XSkgYW5kIChub3QgdmlzaXRbeC0xLHkrMV0pIHRoZW4gcDo9cCBhbmQgZGZzKHgtMSx5KzEpOwogIGlmIG5vdCBwIHRoZW4KICBiZWdpbgogICAgZGZzOj1wOwogICAgaWYgKHg8bikgYW5kICh5PjEpIGFuZCAoYVt4KzEseS0xXT1hW3gseV0pIGFuZCAobm90IHZpc2l0W3grMSx5LTFdKSB0aGVuIGRmcyh4KzEseS0xKTsKICAgIGlmICh4PG4pIGFuZCAoeTxtKSBhbmQgKGFbeCsxLHkrMV09YVt4LHldKSBhbmQgKG5vdCB2aXNpdFt4KzEseSsxXSkgdGhlbiBkZnMoeCsxLHkrMSk7CiAgZW5kOwogIGlmICh4PG4pIGFuZCAoeT4xKSBhbmQgKGFbeCsxLHktMV09YVt4LHldKSBhbmQgKG5vdCB2aXNpdFt4KzEseS0xXSkgdGhlbiBwOj1wIGFuZCBkZnMoeCsxLHktMSk7CiAgaWYgbm90IHAgdGhlbgogIGJlZ2luCiAgICBkZnM6PXA7CiAgICBpZiAoeDxuKSBhbmQgKHk8bSkgYW5kIChhW3grMSx5KzFdPWFbeCx5XSkgYW5kIChub3QgdmlzaXRbeCsxLHkrMV0pIHRoZW4gZGZzKHgrMSx5KzEpOwogIGVuZDsKICBpZiAoeDxuKSBhbmQgKHk8bSkgYW5kIChhW3grMSx5KzFdPWFbeCx5XSkgYW5kIChub3QgdmlzaXRbeCsxLHkrMV0pIHRoZW4gcDo9cCBhbmQgZGZzKHgrMSx5KzEpOwogIGRmczo9cDsKZW5kOwpwcm9jZWR1cmUgaW5pdHZpc2l0Owp2YXIgaSxqOndvcmQ7CmJlZ2luCiAgZm9yIGk6PTEgdG8gbiBkbwogIGZvciBqOj0xIHRvIG0gZG8KICB2aXNpdFtpLGpdOj1mYWxzZTsKZW5kOwpwcm9jZWR1cmUgcHJpbnR2aXNpdDsKdmFyIGksajp3b3JkOwpiZWdpbgogIGZvciBpOj0xIHRvIG4gZG8KICBiZWdpbgogICAgZm9yIGo6PTEgdG8gbSBkbwogICAgd3JpdGUodmlzaXRbaSxqXTo1LCcgJyk7CiAgICB3cml0ZWxuOwogIGVuZDsKZW5kOwpwcm9jZWR1cmUgc29sdmU7CnZhciBpLGoscmVzOndvcmQ7CiAgICBwOmJvb2xlYW47CmJlZ2luCiAgcmVzOj0wOwogIGZvciBpOj0xIHRvIG4gZG8KICBmb3Igajo9MSB0byBtIGRvCiAgaWYgbm90IHZpc2l0W2ksal0gdGhlbgogIGlmIGRmcyhpLGopIHRoZW4gCiAgYmVnaW4KICAgIGluYyhyZXMpOwogIGVuZDsKICB3cml0ZWxuKHJlcyk7CmVuZDsKYmVnaW4KICBlbnRlcjsKICBzb2x2ZTsKZW5kLgoKICAKICA=