Я тоже на компьютере перебрал все варианты квадратов.
Я тоже сперва на компьютере тупым перебором, но потом пересчитал и вручную все 10-12 (или сколько их там) вариантов. Сошлось.
(Оффтоп)
На компьютере примерно так:
Код:
type  vector = array[1..4] of byte;
var  aa: array[1..256] of vector;
     num, all, i,k, i1,i2,i3,i4: integer;
     a1,a2,a3,a4: vector;
begin
  num:=0;
  for i1:=0 to 3 do
    for i2:=0 to 3 do
      for i3:=0 to 3 do
        for i4:=0 to 3 do
          if i1+i2+i3+i4=3 then begin
            inc(num);
            aa[num][1]:=i1;   aa[num][2]:=i2;
            aa[num][3]:=i3;   aa[num][4]:=i4;
            writeln(num:3, '  ', aa[num][1]:2, aa[num][2]:2,
                    aa[num][3]:2, aa[num][4]:2);
            end;
  readln;
  all:=0;
  for i1:=1 to num do
    for i2:=1 to num do
      for i3:=1 to num do
        for i4:=1 to num do begin
          a1:=aa[i1];    a2:=aa[i2];    a3:=aa[i3];    a4:=aa[i4];
          if a1[1]+a2[1]+a3[1]+a4[1]<>3 then continue;
          if a1[2]+a2[2]+a3[2]+a4[2]<>3 then continue;
          if a1[3]+a2[3]+a3[3]+a4[3]<>3 then continue;
          if a1[4]+a2[4]+a3[4]+a4[4]<>3 then continue;
(*
          k:=0;
          for i:=1 to 4 do   if a1[i]=2 then inc(k);
          for i:=1 to 4 do   if a2[i]=2 then inc(k);
          for i:=1 to 4 do   if a3[i]=2 then inc(k);
          for i:=1 to 4 do   if a4[i]=2 then inc(k);
          if k<>4 then continue;
(**)
          inc(all);
          writeln;
          writeln(all:5, '  ', a1[1]:2, a1[2]:2, a1[3]:2, a1[4]:2);
          writeln('':5,  '  ', a2[1]:2, a2[2]:2, a2[3]:2, a2[4]:2);
          writeln('':5,  '  ', a3[1]:2, a3[2]:2, a3[3]:2, a3[4]:2);
          writeln('':5,  '  ', a4[1]:2, a4[2]:2, a4[3]:2, a4[4]:2);
          end;
  readln;
  end.
(глючит паскалевский парсер)