const nmax=20;
var a:array[1..nmax,1..nmax] of byte;
m,n,i,j,k,p,s:byte;
k4:integer;
b:set of byte;
begin
clrscr;
randomize;
repeat
write('Количество строк до ',nmax,' m=');
readln(m);
until m in [1..nmax];
repeat
write('Количество столбцов до ',nmax,' n=');
readln(n);
until n in [1..nmax];
writeln('Исходная матрица:');
for i:=1 to m do
begin
for j:=1 to n do
begin
a[i,j]:=random(4);
write(a[i,j]:3);
end;
writeln;
end;
writeln;
k4:=0;//количество четверок
for i:=1 to m-1 do//проход по матрице
for j:=1 to n-1 do
begin
b:=[];//пустое множество
s:=0;//количество разных в четверке
for k:=i to i+1 do//идем по четверке(квадрат 2х2)
for p:=j to j+1 do
if not(a[k,p] in b) then//если нет числа в множестве
begin
s:=s+1;//считаем
b:=b+[a[k,p]];//добавляем
end;
if s=4 then k4:=k4+1;//если все разные +1
end;
write('Количество четверок [0..3]=',k4);
readln
end.