program skaiciu_lenteles_atstatymas;
  { 28 u‘davinys }

  const max = 10; { maksimalus lentel‚s dydis }
  type lentele = array [1..max, 1..max] of integer;
       masyvas = array [1..max] of integer;

  { ‘emiau suražyti globalieji kintamieji }
  var eil, st : integer; { eilu‡i— ir stulpeli— skai‡ius lentel‚je }
      lent : lentele;    { pradin‚ lentel‚ }

  procedure truksta (var nutrinta : integer; { kiek nutrint— skai‡i— }
                     var e, s : masyvas);
    { suskai‡iuojame kiek yra tr–kstam— element— kiekviename sulpelyje }
    { bei eilut‚je ir kiek iž viso yra nutrint— skai‡i— }
    var i, j : integer;
  begin
    nutrinta := 0;
    for i := 1 to eil do
      e[i] := 0;
    for i := 1 to st do
      s[i] := 0;
    for i := 1 to eil do
      for j := 1 to st do
        if lent[i, j] = -maxint
           then begin
                  e[i] := e[i] + 1;
                  s[j] := s[j] + 1;
                  nutrinta := nutrinta + 1;
                end;
  end;

  function teisinga (atst : lentele) : boolean;
    { ar n‚ra klaid— atstatytoje lentel‚je }
    var sum_eil, sum_st : masyvas; { atitinkam— eilu‡i— ir stulpeli— sumos }
        gerai : boolean;
        i, j : integer;
  begin
    gerai := true;
    for i := 1 to eil do
      sum_eil[i] := 0;
    for i := 1 to st do
      sum_st[i] := 0;
    for i := 1 to eil do
      for j := 1 to st do
         begin
           if j = st  { jei susumavome eilutŠ }
              then gerai := gerai and (sum_eil[i] = atst[i, j])
              else sum_eil[i] := sum_eil[i] + atst[i, j];
           if i = eil { jei susumavome stulpelŤ }
              then gerai := gerai and (sum_st[j] = atst[i, j])
              else sum_st[j] := sum_st[j] + atst[i, j];
         end;
    teisinga := gerai;
  end;

  procedure atstatyti (var atst : lentele; { atstatyta lentel‚ }
                       var klaida, { ar yra lentel‚je klaid— }
                       per_daug : boolean { ar per daug prarasta skai‡i— });
    var e, s : masyvas;
       { tr–kstam— skai‡i— kiekis atitinkamoje eilut‚je ar stulpelyje }
        nutrinta, i, j, k, suma : integer;
        atstatyta : boolean; { ar per‘i–r‚jŠ lentelŠ atstat‚me nors vien… }
                             { skai‡i— }
  begin
    { suskai‡iuojame kiek yra tr–kstam— element— kiekviename sulpelyje }
    { ir eilut‚je ir kiek viso nutrinta skai‡i— }
    truksta (nutrinta, e, s);
    atst := lent;
    { bandysime atstatyti skai‡ius }
    repeat
      atstatyta := false;
      for i := 1 to eil do
         for j := 1 to st do
           if (atst[i, j] = -maxint) { jei skai‡ius nutrintas }
              then if (e[i] = 1) or (s[j] = 1)
                      then begin
                             nutrinta := nutrinta - 1;
                             atstatyta := true;
                             suma := 0;
                             if e[i] = 1
                                then begin { jei eilut‚je tr–ksta vieno skai‡iaus }
                                       for k := 1 to st - 1 do
                                         if k <> j
                                            then suma := suma + atst[i, k];
                                      if j = st
                                         then atst[i, j] := suma
                                         else atst[i, j] := atst[i, st] - suma
                                    end
                               else begin { jei stulpelyje tr–ksta vieno skai‡iaus }
                                      for k := 1 to eil - 1 do
                                        if k <> i
                                           then suma := suma + atst[k, j];
                                        if i = eil
                                           then atst[i, j] := suma
                                           else atst[i, j] := atst[eil, j] - suma
                                    end;
                             e[i] := e[i] - 1;
                             s[j] := s[j] - 1;
                           end;
     until not atstatyta or (nutrinta = 0);
     { tikrinama, ar n‚ra klaid— }
     if nutrinta <> 0
        then per_daug := true
        else begin
               per_daug := false;
               klaida := not teisinga (atst);
             end;
  end;

  var f : text;
      i, j, sk : integer;
      atst : lentele;
      klaida, per_daug : boolean;
begin
  assign (f, 'LENT.DAT');
  reset (f);
  readln (f, eil, st);
  for i := 1 to eil do
    for j := 1 to st do
      lent[i, j] := -maxint; { lentel‚s elementas dar ne‘inomas }
  { Ťvedami lentel‚s elementai }
  while not eof (f) do
    begin
      readln (f, i, j, sk);
      lent[i, j] := sk;
    end;
  close (f);
  { ižvedama pradin‚ lentel‚ }
  for i := 1 to eil do
    begin
      for j := 1 to st do
        if lent[i, j] <> -maxint
           then write (lent[i, j] : 7)
           else write ('      -');
      writeln;
    end;
  writeln;
  { bandoma atstatyti lentelŠ }
  atstatyti (atst, klaida, per_daug);
  { ižvedami rezultatai }
  if not (klaida or per_daug)
     then for i := 1 to eil do { ižvedama atstatyta lentel‚ }
            begin
              for j := 1 to st do
                begin
                  write (atst[i, j] : 6);
                  if lent[i, j] = -maxint
                     then write ('*')
                     else write (' ');
                 end;
              writeln;
            end
     else begin
            writeln ('Atstatyti neŤmanoma');
            if klaida
               then writeln ('Neteisinga pradin‚ lentel‚')
               else writeln ('Per daug prarast— skai‡i—');
          end;
end.