program binaryrectangle; (*si legge tutta la matrice M*N e si contano gli '1' e contemporaneamente si tiene conto della posizione degli '1', devono essere tutti dentro un rettangolo di area uguale al numero count di '1' trovati*)
Uses Math;
const
MAXN = 1000 ;
var
M, N, T, ans, i, j, count, infx, infy, supx, supy, test : LongInt ;
line : Array [ 0 .. MAXN - 1 ] of AnsiString ;
c : char ;
begin
{
uncomment the two following lines if you want to read/write from files
assign(input, 'input.txt'); reset(input);
assign(output, 'output.txt'); rewrite(output);
}
ReadLn ( T) ;
for test: = 1 to T do
begin
ReadLn ( N, M) ;
for i: = 0 to N- 1 do
ReadLn ( line[ i] ) ;
count : = 0 ; infx : = N; infy : = M; supx : = - 1 ; supy : = - 1 ;
for i : = 0 to N- 1 do
begin
for j: = 1 to M do
begin
c: = line[ i] [ j] ;
if ( c = '1' ) then
begin
inc( count) ;
infx : = min( infx, i) ;
infy : = min( infy, j) ;
supx : = max( supx, i) ;
supy : = max( supy, j) ;
end ;
end ;
end ;
ans: = 0 ;
if ( ( count <> 0 ) and ( ( supx - infx + 1 ) * ( supy - infy + 1 ) = count) ) then ans: = 1
else ans: = 0 ;
WriteLn ( ans) ;
end ;
end .
cHJvZ3JhbSBiaW5hcnlyZWN0YW5nbGU7ICgqc2kgbGVnZ2UgdHV0dGEgbGEgbWF0cmljZSBNKk4gZSBzaSBjb250YW5vIGdsaSAnMScgZSBjb250ZW1wb3JhbmVhbWVudGUgc2kgdGllbmUgY29udG8gZGVsbGEgcG9zaXppb25lIGRlZ2xpICcxJywgZGV2b25vIGVzc2VyZSB0dXR0aSBkZW50cm8gdW4gcmV0dGFuZ29sbyBkaSBhcmVhIHVndWFsZSBhbCBudW1lcm8gY291bnQgZGkgJzEnIHRyb3ZhdGkqKQpVc2VzIE1hdGg7CmNvbnN0CiAgICBNQVhOID0gMTAwMDsKCnZhcgogICAgTSwgTiwgVCwgYW5zLCBpLCBqLCBjb3VudCwgaW5meCwgaW5meSwgc3VweCwgc3VweSwgdGVzdCA6IExvbmdJbnQ7CiAgICBsaW5lICAgICAgICAgICAgICAgICAgOiBBcnJheVswLi5NQVhOLTFdIG9mIEFuc2lTdHJpbmc7CiAgICBjIDogY2hhcjsKYmVnaW4KewogICAgdW5jb21tZW50IHRoZSB0d28gZm9sbG93aW5nIGxpbmVzIGlmIHlvdSB3YW50IHRvIHJlYWQvd3JpdGUgZnJvbSBmaWxlcwogICAgYXNzaWduKGlucHV0LCAgJ2lucHV0LnR4dCcpOyAgcmVzZXQoaW5wdXQpOwogICAgYXNzaWduKG91dHB1dCwgJ291dHB1dC50eHQnKTsgcmV3cml0ZShvdXRwdXQpOwp9CgogICAgUmVhZExuKFQpOwogICAgZm9yIHRlc3Q6PTEgdG8gVCBkbyAKICAgICAgIGJlZ2luCiAgICAgICAgUmVhZExuKE4sIE0pOwoKICAgICAgICBmb3IgaTo9MCB0byBOLTEgZG8KICAgICAgICAgICAgUmVhZExuKGxpbmVbaV0pOwogICAgICAgIGNvdW50IDo9IDA7IGluZnggOj0gTjsgaW5meSA6PSBNOyBzdXB4IDo9IC0xOyBzdXB5IDo9IC0xOwoJCWZvciAgaSA6PSAwIHRvIE4tMSBkbwoJCSAgICAgICAgICAgYmVnaW4KCQkJICAgICAgICAgZm9yIGo6PSAxIHRvIE0gZG8gCgkJCQkgICAgICAgICAgYmVnaW4KCQkJCSAgICAgICAgICAgYzo9bGluZVtpXVtqXTsKCQkJICAgICAgICAgICAgICAgaWYgKGMgPSAnMScpIHRoZW4gCgkJCQkJICAgICAgICAgICAgICAgICAgICAgYmVnaW4gCgkJCQkJICAgICAgICAgICAgICAgICAgICAgICBpbmMoY291bnQpOwoJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5meCA6PSBtaW4oaW5meCwgaSk7CgkJCQkJCQkJCQkgICBpbmZ5IDo9IG1pbihpbmZ5LCBqKTsKCQkJCQkJCQkJCSAgIHN1cHggOj0gbWF4KHN1cHgsIGkpOwoJCQkJCQkJCQkJICAgc3VweSA6PSBtYXgoc3VweSwgaik7CgkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kOwoJCQkgICAgICAgICAgICAgIGVuZDsKCQkJICAgICAgIGVuZDsgICAgICAgCgkJYW5zOj0wOwoJCWlmICgoY291bnQgPD4gMCkgYW5kICgoc3VweCAtIGluZnggKyAxKSAqIChzdXB5IC0gaW5meSArIDEpID0gY291bnQpKSB0aGVuIGFuczo9MQoJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgYW5zOj0wOwogICAgICAgIFdyaXRlTG4oYW5zKTsKICAgIGVuZDsKZW5kLgo=