program slaptas_tekstas;

   const PR = 'SLAPTAS.DAT';
         RZ = 'SLAPTAS.REZ';
         MAX_S1 = 800; { maksimalus eilutės (stulpelio) ilgis }
         MAX_S2 = 80;
   type blokas = array [1..MAX_S1, 1..MAX_S2] of char;
        lentele = array [1..80] of longint;

   var t: blokas; { duotasis tekstas }
       S1, S2, M, N: longint;

   procedure skaityti (var S1, S2: longint; var t: blokas);
     var f: text;
         i, j: longint;
   begin
     assign (f, PR);
     reset (f);
     readln (f, S1, S2);
     for i := 1 to S1 do
       begin
         for j := 1 to S2 do
           read (f, t[i, j]);
         readln (f);
       end;
   end; { skaityti }

   procedure rasyti (M, N: longint);
     var f: text;
         i, j: longint;
   begin
     assign (f, RZ);
     rewrite (f);
     writeln (f, M, ' ', N);
     for i := 1 to M do
       begin
         for j := 1 to N do
           write (f, t[i, j]);
         writeln (f);
       end;
     close (f);
   end; { rašyti }

   function spren (M, N, S1, S2: longint): boolean;
   { tikrina, ar M, N yra sprendinys }
     var K, L, i, j, klaida: longint;
   begin
     spren := false;
     for K := 1 to S1 div M do   { Užkoduotą tekstą sudaro K kart }
       for L := 1 to S2 div N do { L blokų }
         if (K <> 1) or (L <> 1) then
           begin
              klaida := 0;
              for i := 1 to M do
                for j := 1 to N do
                  if t[i, j] <> t[(K-1)*M+i, (L-1)*N+j]
                     then if klaida = 0
                             then klaida := klaida + 1
                             else exit; { sprendinys netinkamas }
              if klaida =  0 then exit;
           end;
     spren := true; { klaidų nerasta }
   end; { spren }

   procedure spresti (S1,S2: longint; var M, N: longint);
     var MM, NN: longint;
   begin
     for MM := S1 div 2 downto 1 do
       for NN := S2 div 2 downto 1 do {  ar tokia kombinacija tenkina sąlygas }
          if (S1 mod MM = 0) and (S2 mod NN = 0) and (MM*NN >= 4)
             then if spren (MM, NN, S1, S2) { radome sprendinį }
                      then begin
                             M := MM; N := NN; exit;
                            end;
   end; { spręsti }

begin
  skaityti (S1, S2, t);
  spresti (S1, S2, M, N);
  rasyti (M, N);
end.

