program laipsniai;
  { 71 u‘davinys }
{----------------------------------------------------------}
  const M = 100;   { maksimalus periodo ilgis }
  type periodas = array [1..M] of 00..99;

  procedure laipsnis (sk,                   { duotas skai‡ius }
                       n         : integer;  { ir jo laipsnio rodiklis }
                       var rez   : periodas;
                       var ilgis : integer); { periodo ilgis }
    var rasta   : boolean;  { ar radome pasikartojan‡i… gal–nŠ }
        galunes : periodas; { masyvas, kuriame kaupiamos dvi‘enkl‚s gal–n‚s }
        dv,       { dvi‘enklis skai‡ius, kur reikia kelti laipsniu }
        galune,   { nauja gal–n‚ }
        i, nr   : integer;
  begin
    ilgis := 0;
    rasta := false;
    dv := sk mod 100;
    while not rasta do    { kol neradome pasikartojan‡ios gal–n‚s }
      begin
        galune := 1;
        for i := 1 to n do
            galune := galune * dv mod 100;
        nr := 1;           { iežkosime, ar tokia gal–n‚ nebuvo gauta }
        while not rasta and (nr <= ilgis) do
          if galunes[nr] = galune
              then rasta := true
              else nr := nr + 1;
        if not rasta     { jei gal–n‚ nebuvo rasta anks‡iau }
           then begin    { traukiame j…  masyv… }
                  ilgis := ilgis + 1;
                  galunes[ilgis] := galune
                 end;
          dv := galune
      end;
     {  rezultat— masyv… ražome reikiamas gal–nes - period… }
     for i := nr to ilgis do
        rez [i - nr + 1] := galunes [i];
     ilgis := ilgis - nr + 1
   end;
{----------------------------------------------------------}
  var sk, n, i, ilgis : integer;
      rez : periodas;
begin
  write ('­veskite skai‡i— ir laipsnio rodikl: ');
  readln ( sk, n);

  laipsnis (sk, n, rez, ilgis);

  for i := 1 to ilgis do
    if rez[i] < 10
      then write ('0', rez[i], ' ')
      else write (rez[i], ' ');
end.


