program Paskalio_trikampis;
  { 52 u‘davinys }
  const max = 100;
  type skaiciai = array [1..max] of integer;

  procedure rusiuoti (kiek : integer;
                      var sk : skaiciai);
    { suružiuoja skai‡ius nema‘‚jimo tvarka }
    { r–žiuojama burbuliuko metodu }
    var i, a : integer;
  begin
    i := 1;
    while i < kiek do
      if sk[i] <= sk[i + 1]
         then i := i + 1
         else begin
                a := sk[i];
                sk[i] := sk[i + 1];
                sk[i + 1] := a;
                if i > 1
                   then i := i - 1
                   else i := i + 1;
              end
  end;

  procedure nauja (var e : skaiciai; { turima Paskalio trikampio eilut‚ }
                   var nr : integer { jos numeris });
    { sudaro nr+1-m…j… Paskalio trikampio eilutŠ }
    var i : integer;
        tarp : skaiciai;
  begin
   tarp[1] := 1;
   for i := 2 to nr do
      tarp [i] :=  e[i - 1] + e[i];
   nr := nr + 1;
   tarp[nr] := 1; { eilut‚ baigiama vienetu }
   e := tarp;
  end;

  function galima (e, sk : skaiciai; kiek, nr : integer) : boolean;
    var rasta : boolean;
       i, j : integer;
  begin
    rasta := true;
    i := 1; { prad‚sime nuo ma‘iausio iž turim— skai‡i— }
    j := 1; { iežkosime pirmojo trikampio eilut‚s skai‡iaus }
    { iežkosime vis— trikampio eilut‚s skai‡i— tarp duot—j— }
    while (j <= nr div 2) and rasta do
      begin
        while sk[i] < e[j] do
          i := i + 1;
        rasta :=  (sk[i] = e[j]) and (sk[i + 1] = e[j]);
        j := j + 1; { iežkosime tolesnio trikampio eilut‚s skai‡iaus };
      end;
    { jei eilut‚je nelyginis element— skai‡ius, iežkosime viduriniojo }
    if rasta and (nr mod 2 <> 0)
      then begin
             while sk[i] < e[j] do
               i := i + 1;
             rasta := sk[i] = e[j];
           end;
    galima := rasta
  end;

  procedure eilute (sk : skaiciai; { duoti skai‡iai }
                    kiek : integer; { kiek j— }
                    var eil : skaiciai; { rasta eilut‚ }
                    var kuri : integer { eilut‚s numeris });
    var nr, did, didz : integer;
        e : skaiciai;
  begin
    { skaiciai sur–žiuojami nema‘‚jimo tvarka }
    rusiuoti (kiek, sk);
    did := sk[kiek]; { did‘iausias iž duot— skai‡i— }
    kiek := kiek + 1; { apsaugos, kad neb–t— ižeita iž r‚‘i— }
    sk[kiek] := 0;
    { sugeneruojama pirmoji Paskalio trikampio eilut‚ }
    nr := 1;
    e[1] := 1;
    didz := 1; { did‘iausias atitinkamos Paskalio eilut‚s skai‡ius }
    while (didz <= did) and (nr <= kiek) do
      begin
        if galima (e, sk, kiek, nr) { jei galima sudaryti toki… eilutŠ }
           then begin
                  eil := e;
                  kuri := nr;
                end;
        { sudarome tolesnŠ Paskalio eilutŠ }
        nauja (e, nr);
        didz := e[nr div 2 + nr mod 2];
      end
  end;

  var sk, eil : skaiciai;
      kiek, kuri, i : integer;
      f : text;
begin
  kiek := 0;
  assign (f, 'PASK.DAT');
  reset (f);
  while not eof (f) do
    begin
      kiek := kiek + 1;
      read (f, sk[kiek]);
    end;
  close (f);
  eilute (sk, kiek, eil, kuri);
  assign (f, 'PASK.REZ');
  rewrite (f);
  if kuri = 0
     then writeln ('Negalima')
     else for i := 1 to kuri do
            write (eil[i], ' ');
  close (f);
end.