const fi = '' ;
fo = '' ;
oo = 1000 ;
var a : array [ 0 .. oo , 0 .. oo ] of 0 .. 1 ;
l, h, dem: array [ 0 .. oo + 1 ] of int64;
m, n : longint ;
procedure Optimize;
var i, j : longint ;
ans : int64;
begin
fillchar( h, sizeof( h) , 0 ) ;
ans: = 0 ;
for i: = 1 to m do
begin
for j: = 1 to n do
begin
if a[ i, j] = 1 then begin
l[ j] : = j;
h[ j] : = h[ j] + 1 ;
while h[ l[ j] - 1 ] >h[ j] do
l[ j] : = l[ l[ j] - 1 ] ;
dem[ j] : = h[ j] * ( j- l[ j] + 1 ) + dem[ l[ j] - 1 ] ;
ans: = ans+ dem[ j] ;
//writeln(ans,'==');
//if (i=3) and (j=2) then writeln(dem[1]);
end
else begin
dem[ j] : = 0 ;
l[ j] : = 0 ;
h[ j] : = 0 ;
end ;
end ;
end ;
writeln ( ans) ;
end ;
procedure run;
var i, j, tg : longint ;
s : ansistring ;
begin
assign( input, fi) ; assign( output, fo) ;
reset( input) ; rewrite( output) ;
readln ( m, n) ;
for i: = 1 to m do
begin
readln ( s) ;
for j: = 1 to n do
val( s[ j] , a[ i, j] ) ;
end ;
Optimize;
close( input) ; close( output) ;
end ;
begin
run;
end .
Y29uc3QgICBmaSAgICAgID0nJzsKICAgICAgICBmbyAgICAgID0nJzsKICAgICAgICBvbyAgICAgID0xMDAwOwoKdmFyICAgICBhICAgICAgIDphcnJheVswLi5vbywwLi5vb10gb2YgMC4uMTsKICAgICAgICBsLGgsZGVtOmFycmF5WzAuLm9vKzFdIG9mIGludDY0OwogICAgICAgIG0sIG4gICAgOmxvbmdpbnQ7Cgpwcm9jZWR1cmUgT3B0aW1pemU7CnZhciAgICAgaSwgaiAgICA6bG9uZ2ludDsKICAgICAgICBhbnMgICAgIDppbnQ2NDsKYmVnaW4KICAgICAgICBmaWxsY2hhcihoLCBzaXplb2YoaCksMCk7CiAgICAgICAgYW5zOj0wOwogICAgICAgIGZvciBpOj0xIHRvIG0gZG8KICAgICAgICAgICAgICAgIGJlZ2luCiAgICAgICAgICAgICAgICAgICAgICAgIGZvciBqOj0xIHRvIG4gZG8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgYVtpLGpdPTEgdGhlbiBiZWdpbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbFtqXTo9ajsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhbal06PWhbal0rMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIGhbbFtqXS0xXT5oW2pdIGRvCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxbal06PWxbbFtqXS0xXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbVtqXTo9aFtqXSooai1sW2pdKzEpK2RlbVtsW2pdLTFdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5zOj1hbnMrZGVtW2pdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy93cml0ZWxuKGFucywnPT0nKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vaWYgKGk9MykgYW5kIChqPTIpIHRoZW4gd3JpdGVsbihkZW1bMV0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGJlZ2luCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbVtqXTo9MDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbFtqXTo9MDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaFtqXTo9MDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kOwoKICAgICAgICAgICAgICAgIGVuZDsKICAgICAgICB3cml0ZWxuKGFucyk7CmVuZDsKCnByb2NlZHVyZSBydW47CnZhciAgICAgaSwgaiwgdGcgICAgOmxvbmdpbnQ7CiAgICAgICAgcyAgICAgICA6YW5zaXN0cmluZzsKYmVnaW4KICAgICAgICBhc3NpZ24oaW5wdXQsZmkpO2Fzc2lnbihvdXRwdXQsZm8pOwogICAgICAgIHJlc2V0KGlucHV0KTtyZXdyaXRlKG91dHB1dCk7CiAgICAgICAgcmVhZGxuKG0sIG4pOwogICAgICAgIGZvciBpOj0xIHRvIG0gZG8KICAgICAgICAgICAgICAgIGJlZ2luCiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRsbihzKTsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGo6PTEgdG8gbiBkbwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsKHNbal0sYVtpLGpdKTsKICAgICAgICAgICAgICAgIGVuZDsKICAgICAgICBPcHRpbWl6ZTsKICAgICAgICBjbG9zZShpbnB1dCk7Y2xvc2Uob3V0cHV0KTsKCmVuZDsKCmJlZ2luCiAgICAgICAgcnVuOwplbmQu