program magiski_kvadratai;

  const PR = 'MAG.DAT';
        RZ = 'MAG.REZ';
        MAX_N = 100;
  type kvadratas = array [1..MAX_N, 1..MAX_N] of longint;
       lentele = array [0..MAX_N] of longint; { viena eilut‚ ar stulpelis }
       pranesimai = (geras, galima, blogas);

  { ‘emiau apražyti globalieji kintamieji }
   var n: longint;
       k: kvadratas;

  procedure spausdinti_rez (p: pranesimai; eil, stu, sk: longint);
    var f: text;
  begin
    assign (f, RZ);
    rewrite (f);
    case p of
      geras: writeln (f, 'MAGIŸKASIS KVADRATAS');
      galima: writeln (f, 'GALIMA GAUTI MAGIŸKJ­ KVADRAT');
      blogas: writeln (f, 'NE­MANOMA PAKEISTI MAGIŸKUOJU KVADRATU');
    end;
    if p = galima
       then writeln (f, eil, ' ', stu, ' ', sk);
    close (f);
    halt(0);
  end; { spausdinti_rez }

  procedure du;
    { sprend‘ia u‘davin, kai n = 2 }
  begin
    if (k[1, 1] = k[1, 2]) and (k[1, 1] = k[2, 1]) and (k[1, 1] = k[2, 2])
       then spausdinti_rez ( geras, 0, 0, 0)
    else if (k[1, 1] = k[1, 2]) and (k[1, 1] = k[2, 1])
       then spausdinti_rez (galima, 2, 2, k[1, 1]) { blogas k[2, 2] }
    else if (k[1, 1] = k[1, 2]) and (k[1, 1] = k[2, 2])
       then spausdinti_rez (galima, 2, 1, k[1, 1]) { blogas k[2, 1] }
    else if (k[1, 1] = k[2, 1]) and (k[1, 1] = k[2, 2])
       then spausdinti_rez (galima, 1, 2, k[1, 1]) { blogas k[1, 2] }
    else if (k[2, 1] = k[1, 2]) and (k[2, 1] = k[2, 2])
       then spausdinti_rez (galima, 1, 1, k[2, 2]) { blogas k[1, 1] }
       else spausdinti_rez (blogas, 0,0,0);
  end; { du }

  procedure sumos (var eil, st: lentele; var istr1, istr2: longint);
    { suskai‡iuoja stulpeli— eilu‡i— bei stri‘aini— sumas }
    var i, j: longint;
  begin
    { eilu‡i— bei stulpeli— sumos }
    for i := 1 to n do
      begin
        eil[i] := 0; st[i] := 0;
       for j := 1 to n do
         begin
           eil[i] := eil[i] + k[i, j];
           st[i] := st[i] + k[j, i];
         end;
      end;
    { stri‘aini— sumos }
    istr1 := 0; istr2 := 0;
    for i := 1 to n do
      begin
        istr1 := istr1 + k[i, i];
        istr2 := istr2 + k[i, n-i+1];
      end;
  end; { sumos }

  function ar_magiskas (eil, st: lentele; istr1, istr2: longint): boolean;
    { nustato, ar kvadratas yra magižkas }
    var i: integer;
        taip: boolean;
  begin
    taip := istr1 = istr2;
    for i := 1 to n do
      taip := taip and (eil[i] = istr1) and (st[i] = istr1);
    ar_magiskas := taip;
  end; { ar_magiskas }

  procedure magiskas;
    var eil, st, eil_nau, st_nau: lentele;
        eilu,
        buvusi, i, stulp, istr1, istr2, istr1_nau, istr2_nau: longint;
  begin
    if n = 2  { atskiras atvejis }
       then du;
    { suskai‡iuojame sumas }
    sumos (eil, st, istr1, istr2);
    if ar_magiskas (eil, st, istr1, istr2)
       then spausdinti_rez (geras, 0,0,0);
    { laikome, kad neteisinga yra pirmosios eilut‚s suma }
    stulp := 1;
    for i := 2 to n do
      if st[i] = eil[1]
         then stulp := i;
    { simename buvusi… žio langelio reikžmŠ }
    buvusi := k[1, stulp];
    k[1, stulp] := k[1, stulp] + eil[2] - eil[1];
    if k[1, stulp] < 0 { jei ne nat–ralusis }
       then k[1, stulp] := 1;
    { perskai‡iuojamos sumos }
    sumos (eil_nau, st_nau, istr1_nau, istr2_nau);
    if ar_magiskas (eil_nau, st_nau, istr1_nau, istr2_nau)
       then spausdinti_rez (galima, 1, stulp, k[1, stulp]);
    { jei ne - atstatome buvusi… reikžmŠ }
    k[1, stulp] := buvusi;
    { ir laikome, kad pirmos eilut‚s suma yra korektižka }
    eilu := 1; stulp := 1;
    for i := 1 to n do
      begin
        if eil[i] <> eil[1] then eilu := i;
        if st[i] <> eil[1] then stulp := i;
      end;
    k[eilu, stulp] := k[eilu, stulp] + eil[1] - eil[eilu];
    { perskai‡iuojamos sumos }
    if k[eilu, stulp] < 0
       then k[eilu, stulp] := 1;
    sumos (eil_nau, st_nau, istr1_nau, istr2_nau);
    if ar_magiskas (eil_nau, st_nau, istr1_nau, istr2_nau)
       then spausdinti_rez (galima, eilu, stulp, k[eilu, stulp])
       else spausdinti_rez (blogas, 0,0,0);
  end; { magižkas }

  procedure skaityti (var n: longint; var k: kvadratas);
    var f: text;
        i, j: longint;
  begin
    assign (f, PR);
    reset (f);
    readln (f, n);
    for i := 1 to n do
      for j := 1 to n do
        read (f, k[i, j]);
    close (f);
  end; { skaityti }

begin
  skaityti (n, k);
  magiskas;
end.
