program sudetis_stulpeliu;
  { 46 u‘davinys }
  const M = 30; { maksimalus ne‘inom— skaitmen— skai‡ius }
        ILGIS = 10; { maksimalus skai‡iaus ilgis }
  type skaiciai = array [1..3, 1..ILGIS] of -1..9;
                    { -1 ‘ym‚s ne‘inom… skaitmenŤ }
       nezinomi = array [1..M] of record
                                    ska, skt : integer;
                                    { kurio skai‡iaus kuris skaitmuo }
                                    { yra ne‘inomas }
                                  end;

  { ‘emiau suražyti globalieji kintamieji }
  var sk : skaiciai; { trys duotieji skai‡iai }
      nez : nezinomi; { ne‘inom— ir iž karto neatstatom— skaitmen— s…ražas }
      viso,           { ir skai‡ius }
      prad2, prad1, { ties kuriuo skaitmeniu prasideda pirmas ir antras sk. }
      ilg : integer;  { ilgiausio skai‡iaus ilgis }
      yra : boolean; { ar rastas sprendinys }

  procedure reiksme;
    { apskai‡iuoja reižkinio reikžmŠ, kai kiekviename stulpelyje tr–ksta }
    { ne daugiau kaip vieno skaitmens }
    var kopija : skaiciai;
        min,  { kiek saugoma mintyje }
        i : integer;
        gerai : boolean;
  begin
    { Ťstatysime tr–kstamus skaitmenis }
    kopija := sk;
    min := 0;
    gerai := true;
    for i := ilg downto 1 do
      begin
        if sk[1, i] = -1  { pirmas skaitmuo ne‘inomas }
           then if prad2 > i
                   then sk[1, i] := sk[3, i] + min
                   else sk[1, i] := (sk[3, i] - min - sk[2, i] + 10) mod 10 ;
        if sk[2, i] = -1  { antras skaitmuo ne‘inomas }
           then if prad1 > i
                   then sk[2, i] := sk[3, i] + min
                   else sk[2, i] := (sk[3, i] - min - sk[1, i] + 10) mod 10;
        if sk[3, i] = -1  { tre‡ias skaitmuo ne‘inomas }
           then sk[3, i] := (sk[1, i] + min + sk[2, i]) mod 10;
        { ar pavyko s‚kmingai atstatyti }
        if (sk[1, i] < 0) or (sk[2, i] < 0) or (sk[3, i] < 0)
           or (((sk[1, i] + sk[2, i] + min) mod 10) <> sk[3, i])
               then gerai := false;
        min := (sk[1, i] + min + sk[2, i]) div 10;
      end;
    { patikrinsime, ar nei vienas skai‡ius neprasideda nuliais }
    yra := gerai and (sk[1, prad1] <> 0) and (sk[2, prad2] <> 0) and
           (sk[3, 1] <> 0);
    if not yra
       then sk := kopija;
  end;

  procedure spresti (kuris,  { Ť kurŤ skaitmenŤ Ťstatysime }
                     skaitmuo : integer { kokŤ skaitmenŤ });
    { rekursin‚ proced–ra, Ťstatin‚janti ne‘inomus skaitmenis }
    var s : integer;
  begin
    if kuris = 0  { Ťstatyti visi skaitmenys }
       then reiksme { apskai‡iuojame reikžmŠ }
       else begin
              { Ťstatysime i-t…jŤ skaitmenŤ }
              sk[nez[kuris].ska, nez[kuris].skt] := skaitmuo;
              { Ťstatysime Ť likusius ne‘inomus skaitmenis }
              for s := 0 to 9 do
                if not yra
                   then spresti (kuris - 1, s);
             end;
  end;

  function nezin (sk : skaiciai; i : integer) : integer;
    { randa, kiek i-t…j…me stulpelyje yra ne‘inom— skaitmen— }
    var kiek : integer;
  begin
    kiek := 0;
      if sk[1, i] = -1
         then kiek := kiek + 1;
      if sk[2, i] = -1
         then kiek := kiek + 1;
      if sk[3, i] = -1
         then kiek := kiek + 1;
      nezin := kiek;
  end;

  procedure sudeti (var sk : skaiciai; { duotieji skai‡iai }
                    var yra : boolean { ar yra sprendinys });
    var kiek, { ne‘inom— skaitmen— skai‡ius stulpelyje }
        i, s, nr : integer;
  begin
    viso := 0; { tiek yra iž pirmo karto neatstatom— skai‡i— }
    { rasime ne‘inom— ir iž karto neatstatom— skaitmen— vietas }
    for i := 1 to ilg do
      begin
          kiek := nezin (sk, i);
          if (kiek > 1)
           then begin { jei stulpelyje daugiau nei vienas ne‘inomas skai‡ius }
                  { Ťtraukiame pirm… ne‘inom… skaitmenŤ }
                  viso := viso + 1;
                  if sk[1, i] = -1
                     then nr := 1
                     else nr := 2;
                  nez[viso].ska := nr;
                  nez[viso].skt := i;
                  if kiek = 3  { jei reikia, Ťtraukiame antr… }
                     then begin
                            viso := viso + 1;
                            nez[viso].ska := nr;
                            nez[viso].skt := i;
                          end;
                end;
      end;
    yra := false;
    for s := 0 to 9 do
      if not yra
         then spresti (viso, s);
  end;

  procedure ivedimas;
    { Ťveda pradinius duoemnis }
    var f : text;
        v : string;
        i, j : integer;
        c : char;
  begin
    write ('­veskite pradini— duomen— bylos vard…: ');
    readln (v);
    assign (f, v);
    reset (f);
    prad1 := 1; prad2 := 1;
    for i := 1 to 3 do
      begin
        j := 1;
        while not eoln (f) do
          begin
            read (f, c);
            if c = ' '
               then begin
                      if i = 1
                         then prad1 := prad1 + 1
                         else prad2 := prad2 + 1;
                      sk[i, j] := 0
                     end
               else if c = '*'
                       then sk[i, j] := -1
                       else sk[i, j] := ord (c) - ord ('0');
            j := j + 1;
          end;
        readln (f);
      end;
    close (f);
    ilg := j - 1;
  end; { ivedimas }

  var    i, j : integer;
begin
  ivedimas;
  sudeti (sk, yra);
  if not yra
     then writeln ('Sprendinio n‚ra')
     else for i := 1 to 3 do
            begin
              for j := 1 to ilg do
                if  (i = 1) and (prad1 > j) or
                    (i = 2) and (prad2 > j)
                   then write (' ')
                   else write (sk[i, j]);
              writeln
            end;
end.