program lygybe;
  { 49 u‘davinys }

  function teis (s : string) : boolean;
    { patikrina, ar teisinga lygyb‚ s }
    var reiksme, { kairioji lygyb‚s pus‚ }
        i, sk , kodas : integer;
        simb : string; { skai‡ius }
        nul : boolean;  { nei vienas skai‡ius kair‚je lygyb‚s pus‚je }
                        { negali b–ti lygus 0 }
  begin
    nul := false;
    reiksme := 0;
    simb := '';
    i := 1;
    { apskai‡iuosime kairi…j… lygyb‚s pusŠ }
    while s[i] <> '=' do
      begin
        { atskiriame skai‡i— }
        while s[i] in ['0'..'9'] do
          begin
            simb := simb + s[i];
            i := i + 1;
          end;
        { apskai‡iuojame jo reikžmŠ }
        val (simb, sk, kodas);
        reiksme := reiksme + sk;
        nul := nul or (sk = 0);
        if s[i] <> '=' { ‘enklas '+' ar '-' - jau kito skai‡iaus prad‘ia }
           then begin
                  simb := s[i];
                  i := i + 1;
                end;
      end;
     simb := copy (s, i + 1, length (s) - i + 1);
     val (simb, sk, kodas);
     { sulyginame abi lygyb‚s puses ir patikriname, ar nebuvo nuli— }
     teis := (sk = reiksme) and not nul
  end;

  procedure spresti (s : string; { duotoji simboli— eilut‚ }
                     var yra : boolean { ar rastas nors vienas sprendinys });

    procedure skaiciuoti;
      { rekursin‚ proced–ra, perrenkanti visus variantus }
      { naudoja globalius kintamuosius s, yra }
      var vieta, { simbolio '?' vieta eilut‚je }
          i : integer;
    begin
      vieta := pos ('?', s);
      if vieta > 0 { jei dar yra ne‘inom— skaitmen— }
         then for i := 0 to 9 do
                begin
                  s[vieta] := chr(i + ord('0'));
                  skaiciuoti;
                  s[vieta] := '?'{ atstatome buvusi… reikžmŠ }
                end
         else if teis (s) { jei rastas sprendinys }
                 then begin
                       writeln (s);
                       yra := true;
                     end;
    end;


  begin
    yra := false;
    skaiciuoti;
  end;

   var i : integer;
       f : text;
       vardas, s : string;
       yra : boolean;
begin
  write ('­veskite pradini— duomen— bylos vard…: ');
  readln (vardas);
  assign (f, vardas);
  reset (f);
  readln (f, s);
  close (f);
  spresti (s, yra);
  if not yra
     then writeln ('Lygyb‚je yra klaid—');
end.