program trys_vienodi_skaitmenys;
  { 130 u‘davinys }
{----------------------------------------------------------}
  const byla1 = 'vienodi.dat';
        byla2 = 'vienodi.rez';
        MAX   = 20;    { maksimalus iežkom— skai‡i— kiekis }
        MAX_N = 10000; { maksimali n reikžm‚ }
  type  rezult = array [1..MAX] of
                   record
                     skaicius,   { skai‡ius dežimtain‚je sistemoje }
                     sis1, sis2, { abi sistemos }
                     sk1, sk2: longint { skaitmenys atitinkamose sistemose }
                   end;

    var lent: array [2..MAX_N] of longint;
        { lentel‚, kurioje bus saugomas skai‡iaus 111, u‘ražyto visose }
        { skai‡iavimo sistemose nuo 2 iki MAX_N, atitikmuo dežimtain‚je }
        { sistemoje }
        { lent -  globalus kintamasis }

  procedure vienodi (m, n: longint;
                     var rez: rezult;
                     var kiek: longint); { kiek rasta domi— skai‡i— }
    var  rasta, { keliomis sistemomis trimis vienodais skaitmenimis }
                { u‘siražo skai‡ius }
         pag1, pag2, { abiej— sistem— pagrindai }
         s          : longint;
    procedure lentele;
      { sudaro lentelŠ, kurioje bus saugomas skai‡iaus 111, u‘ražyto visose }
      { skai‡iavimo sistemose nuo 2 iki MAX_N, atitikmuo dežimtain‚je       }
      { sistemoje }
      { kintamasis lent - globalus }
      var i: longint;
    begin
      for i := 2 to MAX_N do
        lent[i] := 1 + i + i * i
    end; { lentel‚ }

    function ieskoti (x: longint): longint;
      { dvejetain‚s paiežkos algoritmas }
      { rezultatas - lentel‚s lent indeksas i, }
      { toks kad lent[i - 1] <= x < lent[i] }
      var i1, i2, i: longint;
    begin
      i1 := 2;
      i2 := s;
      while i1 < i2 do
        begin
          i := (i1 + i2) div 2;
          if x < lent[i]
             then i2 := i
             else i1 := i + 1
         end;
      ieskoti := i1
    end; { iežkoti }

  begin { vienodi }
     lentele;     { sudarome lentelŠ }
     kiek := 0;   { dar nerasta nei vieno skai‡iaus }
     if m = 1     { vieneto tikrai negal‚sime u‘ražyti trimis skaitmenimis }
        then m := 2;
     for s := m to n do    { nagrin‚sime visus skai‡ius iž duoto intervalo }
       begin
         rasta := 0;
         pag1 := ieskoti (s);  { iežkoma did‘iausio galimo pagrindo }
         { iežkosime pirmos sistemos, kurioje skai‡ius u‘siražo }
         { trimis vienodais skaitmenimis }
         while (rasta = 0) and (pag1 > 2) do
           begin
             pag1 := pag1 - 1;
             if (s div lent[pag1] >= pag1) { t.y. skai‡iavimo sistemose }
                { su ma‘esniais pagrindais skai‡ius s u‘siražys keturiais }
                { ar daugiau skaitmen—; t— atvej— nereikia tyrin‚ti }
                then pag1 := 1
                else if (s mod lent[pag1] = 0)  { skai‡ius u‘siražo trimis }
                        then rasta := rasta + 1 { vienodais skaitmenimis }
           end;
         { iežkosime antrosios sistemos }
         pag2 := pag1;
         while (rasta = 1) and (pag2 > 2) do
           begin
             pag2 := pag2 - 1;
             if (s div lent[pag2] >= pag2)
                then pag2 := 1
                else if (s mod lent[pag2] = 0)
                        then rasta := rasta + 1

           end;
         if rasta = 2  { jei radome dvi sistemas }
            then begin { simename rezultat… }
                   kiek := kiek + 1;
                   rez[kiek].skaicius := s;
                   rez[kiek].sis1 := pag1;
                   rez[kiek].sk1 := s div lent[pag1];
                   rez[kiek].sis2 := pag2;
                   rez[kiek].sk2 := s div lent[pag2];
                 end;
       end;
  end;
{----------------------------------------------------------}
  var f: text;
      i, m, n, kiek: longint;
      rez: rezult;
begin
  assign (f, byla1);
  reset (f);
  read (f, m, n);
  close (f);

  ieskoti (m, n, rez, kiek);

  assign (f, byla2);
  rewrite (f);
  if kiek = 0
     then writeln (f, kiek)
     else for i := 1 to kiek do
            begin
              writeln (f, rez[i].skaicius);
              write (f, rez[i].sis1, ' ');
              writeln (f,  rez[i].sk1, ' ', rez[i].sk1, ' ', rez[i].sk1);
              write (f, rez[i].sis2, ' ');
              writeln (f, rez[i].sk2, ' ', rez[i].sk2, ' ', rez[i].sk2);
            end;
  close (f)
end.

