program operaciju_zenklai;
  { 31 u‘davinys }

  const max = 5; { kintam—j— skai‡ius reižkinyje }
  type kintamieji = array [1..max+1] of integer;
       operacijos = (sudetis, atimtis, daugyba, liekana, dalmuo);
       rinkinys = array [1..max-1] of operacijos; { operacij— rinkinys }


  procedure perstumti (i, liko : integer;
                       var sk : kintamieji;
                       var op : rinkinys);
    { pažalina i+1-…j kintam…j bei i-t…j… operacij… }
    var j : integer;
  begin
    for j := i to liko do
      begin
        sk[j + 1] := sk[j + 2];
        op[j] := op[j + 1]
      end
  end;

  procedure skaiciuoti (sk : kintamieji; op : rinkinys; var rasta : boolean);
    { apskai‡iuoja reižkinio reikžmŠ }
    var liko,  { tiek operacij— reikia atlikti }
        i, rez     : integer;
        gerai : boolean; { ar neprireik‚ dalinti iž nulio }
  begin
    liko := max - 1; { tiek operacij— reikia atlikti }
    { atliekamos daugybos ir dalybos operacijos }
    i := 1;
    gerai := true;
    while (i <= liko) and gerai do
      begin
        case op[i] of
          daugyba : if sk[i] < maxint div sk[i + 1]
                       then sk[i] := sk[i] * sk[i + 1]
                       else gerai := false;
          dalmuo : if sk[i + 1] = 0
                      then gerai := false
                      else sk[i] := sk[i] div sk[i + 1];
          liekana : if sk[i + 1] = 0
                       then gerai := false
                       else sk[i] := sk[i] mod sk[i + 1];
        end;
        if (op[i] in [daugyba, dalmuo, liekana]) and gerai
           then begin
                  liko := liko - 1;
                  perstumti (i, liko, sk, op);
                end
           else i := i + 1;
      end;
    { atliekamos sud‚ties ir atimties operacijos }
    rez := sk[1];
    for i := 1 to liko do
      case op[i] of
        sudetis : rez := rez + sk[i + 1];
        atimtis : rez := rez - sk[i + 1]
      end;
    rasta := gerai and (rez = sk[max + 1]);
  end;


  procedure parinkti (sk : kintamieji; n : integer;
                      var op : rinkinys;
                      var rasta : boolean);
    { parenka operacijÐ n-tai pozicijai }
    var i : operacijos;
 begin
   for i := sudetis to dalmuo do
       if not rasta
         then begin
                op[n] := i;
                if n = max - 1
                   then skaiciuoti (sk, op, rasta)
                   else parinkti (sk, n + 1, op, rasta)
              end
 end;

 procedure ieskoti (sk : kintamieji;
                    var op : rinkinys;
                    var rasta : boolean);
 begin
   rasta := false;
   parinkti (sk, 1, op, rasta);
 end;

  procedure spausdinti (sk : kintamieji; op : rinkinys);
    { ižvedamas rezultatas }
    var i : integer;
  begin
    write (sk[1]);
    for i := 1 to max - 1 do
      begin
        case op[i] of
          sudetis : write(' + ');
          atimtis : write(' - ');
          daugyba : write(' * ');
          dalmuo  : write(' / ');
          liekana : write(' \ ');
        end;
        write (sk[i + 1]);
      end;
    writeln (' = ', sk[max + 1]);
  end;

  var i : integer;
      sk : kintamieji;
      op : rinkinys;
      rasta : boolean;
begin
  for i := 1 to max+1 do
    read (sk[i]);
  ieskoti (sk, op, rasta);
  if rasta
     then spausdinti (sk, op)
     else writeln ('Sprendimo nÓra.')
end.




