program Hammingo_seka;
  { 68 u‘davinys }
  uses crt;
  const max = 2000; { did‘iausias galimas Hammingo sekos ilgis }
        d : array [1..3] of integer = (2, 3, 5);
                    { sekos daugikliai }
  type masyvas = array [1..max] of longint;

  procedure generuoti (var seka : masyvas; { Hammingo seka}

                       var kiek : integer { jos nari— skai‡ius });
    var a : array [1..3] of integer; { trij— Hammingo sekos nari— }
            { numeriai, iž kuri— rinksim‚s tolesn nar }
        liko : integer; { iž tiek daugikli— dar galima dauginti tris }
                        { sekos narius, iž kuri— renkamasi ir nebus }
                        { viržytas maxlongint }
        i, min, num : longint;
  begin
    { sugeneruojame pirm…j nar }
    kiek := 1; seka[1] := 1;
    for i := 1 to 3 do
      a[i] := 1;
    liko := 3;
    while not keypressed and (liko <> 0) do
      { kol nepaspaustas tarpo klavižas ir neviržija maxlongint }
      begin
         { iž trij— nari—, padaugint— iž daugikli—, ižrinksime ma‘iausi… }
         min := maxlongint;
         for i := 1 to 3 do
           if (a[i] <> 0) and (seka[a[i]] * d[i] < min)
              then begin
                     min := seka[a[i]] * d[i];
                     num := i
                   end;
         { jei narys netrauktas  sek… }
         if min > seka [kiek]
            then begin
                   kiek := kiek + 1;
                   seka[kiek] := min
                 end;
         { pereinama prie tolesnio sekos nario }
         a[num] := a[num] + 1;
         { tikrinsime, ar tolesnis sekos narys neviržys maxlongint }
         if maxlongint div d[num] < seka[a[num]]
            then begin
                   a[num] := 0;
                   liko := liko - 1;
                 end
      end;
  end;

  var f : text;
      i, kiek : integer;
      seka : masyvas;
begin
  generuoti (seka, kiek);
  assign (f, 'HAMMING.REZ');
  rewrite (f);
  for i := 1 to kiek do
    writeln (f, i,  ' ', seka[i]);
  close (f)
end.