Program Olimpiada2;

uses
  Crt;

const
  Byla = 'ORNAM.DAT';
  MaxX = 50;
  MaxY = 50;

type Masyvas = array[1..MaxY] of String[MaxX];

var Fl    : Text;
    mas   : Masyvas;
    Xrez,Yrez : Byte;  { vietos, kuri… reikia pataisyti, koordinat‚s }

procedure Pakeisk(x,y : Byte);
begin
  if mas[y][x]='1' then mas[y][x]:= '0'
                   else mas[y][x]:= '1';
end;

function Tikrink(galima : Boolean) : Byte;

{ Rekursin‚ funkcija,kuri tikrina, ar teisingas piežinys.
  Radus klaid…, bandoma j… taisyti (funkcija kreipiasi  save
  su parametru galima=False). Pavykus darbas baigiamas.

  Kai funkcijos parametras
  galima=False, tai joki— pakeitim— masyve daryti negalima;
  galima=True,  tai galime pakeisti vien… element…. }

var xmin,xmax,ymin,ymax,  { ribin‚s piežinio koordinat‚s }
    x,y,
    Ats        : Byte;    { pagalbiniai kintamieji }

begin

  xmin:= MaxX+1;                 { nustatome xmin ir xmax }
  xmax:= 0;
  for y:= 1 to MaxY do
    for x:= 1 to MaxX do
      if mas[y][x]='1' then
         begin
          if x<xmin then xmin:= x;
          if x>xmax then xmax:= x
         end;

  ymin:= MaxY+1;                 { nustatome ymin ir ymax }
  ymax:= 0;
  for y:= 1 to MaxY do
    if Pos('1',mas[y])>0 then
       begin
         if y<ymin then ymin:= y;
         if y>ymax then ymax:= y
       end;

  if (xmax=0) and (ymax=0) then Tikrink:= 1  { jei tuž‡ias laukas,tai
                                               perpiežta teisingai }
  else begin
    Ats:= 1;
    y:= ymin;
    repeat
      x:= xmin;
      repeat
        if (mas[y][x]<>mas[y][xmax+xmin-x]) or
           (mas[y][x]<>mas[ymax+ymin-y][x]) then
           if galima then
              begin
                Pakeisk(x,y);        { pataisome piežin }

                if Tikrink(False)=1  { tikriname, ar pataisytas piežinys
                                       teisingas }
                   then begin
                          Xrez:= x;
                          Yrez:= y;
                          if mas[y][x]='0' then Ats:= 3 { reik‚jo pažalinti }
                                           else Ats:= 2 { reik‚jo papildyti }
                        end
                   else Ats:= 4;

                Pakeisk(x,y)         { atstatome piežin }
              end
           else Ats:= 4;
        Inc(x)
      until (Ats=4) and not galima or   { pataisytas piežinys neteisingas }
            (Ats in [2,3]) or           { pavyko pataisyti }
            (x>xmax);                   { baig‚si tikrinama eilut‚ }
      Inc(y)
    until (Ats=4) and not galima or
          (Ats in [2,3]) or
          (y>ymax);                     { per‘i–r‚tas visas piežinys }

    Tikrink:= Ats
  end
end;

Begin { Olimpiada2 }

  ClrScr;
  Assign(Fl, Byla);
  Reset (Fl);

  for Yrez:= 1 to MaxY do
    ReadLn(Fl,mas[Yrez]);

  Close (Fl);

  Xrez:= 0; Yrez:=0;

  case Tikrink(True) of
    1 : WriteLn('Perpiežta teisingai.');
    2 : WriteLn('Reikia papildyti langeliu (',Xrez,',',Yrez,').');
    3 : WriteLn('Reikia pažalinti langel  (',Xrez,',',Yrez,').');
    4 : WriteLn('Yra daugiau kaip viena klaida.')
  end;

  WriteLn;
  WriteLn('Paspauskite Enter klaviž… ...');
  ReadLn

End. { Olimpiada2 }