program klaida_renkant_skaicius;
{----------------------------------------------------------}
  const Max = 3;  { maksimalus sprendini— skai‡ius }
  type rezult = array [1..Max] of record
                                    a, b, c : integer
                                  end;
  procedure taisyti (a, b, c : integer;  { pradiniai skai‡iai }
                     var sk : integer;   { sprendini— skai‡ius }
                     var rez : rezult);  { ir patys sprendiniai }
    var teis : integer;
    procedure irasyti (a, b, c : integer);
       { Ťražo skai‡ius a, b, c Ť rezultat— masyv… rez }
       { rez ir sk - global–s kintamieji }
    begin
      sk := sk + 1;
      rez[sk].a := a;
      rez[sk].b := b;
      rez[sk].c := c;
    end;
    function praleistas (x, y : integer) : boolean;
      { tikrina, ar renkant x, nebuvo praleistas skaitmuo ir
        gautas skai‡ius y }
    begin
      { praleid‘iame vienodus skaitmenis }
      while (x mod 10 = y mod 10) and (x > 0) do
         begin
           x := x div 10;
           y := y div 10
         end;
       x := x div 10;
       praleistas := x = y
    end;
    function klaida (x, y : integer) : boolean;
      { tikrina, ar renkant nebuvo padaryta klaida -
         gal x ir y skiriasi tik vienu skaitmeniu }
       var kl_sk : integer; { keliais skaitmenimis skiriasi
                              skai‡iai }
    begin
      kl_sk := 0;
      while ((x <> 0) or (y <> 0)) and (kl_sk <= 1) do
         begin
           if x mod 10 <> y mod 10
              then kl_sk := kl_sk + 1;
           x := x div 10;
           y := y div 10
          end;
       klaida := kl_sk = 1
    end;

  begin
    sk := 0;
    if a + b = c
       then irasyti (a, b, c)
       else begin
              { iežkome klaidos skai‡iuje a }
              teis := c - b;
              if praleistas (teis, a) or praleistas (a, teis) or
                 klaida (teis, a)
                 then irasyti (teis, b, c);
               { iežkome klaidos skai‡iuje b }
               teis := c - a;
              if praleistas (teis, b) or praleistas (b, teis) or
                 klaida (teis, b)
                 then irasyti (a, teis, c);
               { iežkome klaidos skai‡iuje c }
               teis := a + b;
              if praleistas (teis, c) or praleistas (c, teis) or
                 klaida (teis, c)
                 then irasyti (a, b, teis)
            end
  end;

{----------------------------------------------------------}
  var a, b, c, sk, i : integer;
      rez : rezult;
begin
  write ('­veskite tris skai‡ius: ');
  readln (a, b, c);
  taisyti (a, b, c, sk, rez);
  writeln (sk);
  for i := 1 to sk do
      writeln (rez[i].a, ' ', rez[i].b, ' ', rez[i].c);
end.

