{ CEOI'98 Penktoji Centrin‚s Europos žali— informatikos olimpiada }
{ Zadar, Kroatija }
{ Antras u‘davinys KORTELS }

{ Sprendim… pareng‚ Justas Kranauskas, VTGTM lic‚jus, 12 kl. }

{ IDJA: Pagal suražytus skai‡ius Alisa ižd‚lioja korteles:
  pozicijoje ai yra kortel‚ su numeriu a(i+1).

  Tai reižkia, kad ižd‚liotas korteles galime vaizduoti grafu
  (t. y. vienu ciklu grafe). Grafas sudaromas taip: jei pozicijoje x
  yra kortel‚ su numeriu y, tai iž virž–n‚s x nukreipiama briauna 
  virž–nŠ y.

       a1 --> a2 --> a3 -->a4 --> an -- > a1

  Imkime virž–nŠ a1.
  Iž jos nukreipta briauna  virž–nŠ a2 ( virž–nŠ a su numeriu 2^0 + 1;)
  Po pirmo maižymo iž jos bus nukreipta briauna  virž–nŠ a3 (2^1 + 1);
  Po antro maižymo bus nukreipta  a5 (2^2 + 1);
  ....
  Po k-tojo maižymo bus nukreipta  ax, kur x = 2^k + 1;

  Virž–n‚s skai‡iuojamas moduliu n.
  T. y. x = 2^k mod n + 1;

  Jei rodysime, kad po kurio laiko iž a1 briauna bus nukreipta  a2,
  tai korteli— ižd‚stymas pasikartos. Kadangi graf… sudaro vienas ciklas,
  galime pernumeruoti virž–nes ir gausime, kad tai galioja kiekvienai
  virž–nei: t. y. po ka‘kiek dvigubo maižymo operacij—, iž ai bus
  nukreipta briauna  a(i+1).

  Iž a1 ižeinanti briauna bus nukreipta  a2, jei egzistuos toks k, kad
      2^k mod n + 1 = 2,
  t. y. jei 2^k mod n = 1,
  k - dvigubo maižymo operacij— skai‡ius, k >= 1;

  Oilerio teorema teigia: Jeigu a ir m neturi bendr— dalikli—,
  (t. y. bdd (a, m) =  1), tai a^(fi(m)) mod m = 1;

  €ia fi(m) yra Oilerio funkcija. Ji lygi kiekiui nat–rini— skai‡i— ne
  didesni— u‘ m ir tarpusavyje pirmini— su m.

  M–s— atveju a = 2, m = n. kadangi n nelyginis, tai bdd(2, n) = 1. taigi,
  galime taikyti Oilerio teorem…. Kai maižymo operacij— skai‡ius taps lygus
  k = fi(n), iž a1 ižeinanti briauna v‚l bus nukreipta  a2.

  Taigi, su turimomis kortel‚mis reikia atlikin‚ti dvigubo maižymo operacijas
  kol v‚l gausime dabartinŠ situacija. Atlikt— maižymo operacij— skai‡i—
  (t.y. periodo ilg) pa‘ym‚kime P. Norint gauti pradin korteli—
  ižd‚stym… reikia atlikti (P - S mod P) dvigubo maižymo operacij—.
  }

program korteles;
  const maxn = 1000;
  type eile = array [1..maxn] of integer;

  var f : text;
      n, kiek, i : integer;
      m1 : eile;

  procedure maisyk (m1 : eile; var m2 : eile);
  {sumaižo kortas}
    var i : integer;
  begin
    for i := 1 to n do
      m2[i] := m1[m1[i]];
  end;

  function lygu (m1, m2 : eile) : boolean;
  {patikrina, ar kort— ižsid‚stymas yra vienodas}
    var i : integer;
  begin
    lygu := true;
    for i := 1 to n do
      if m1[i] <> m2[i]
        then
          begin
            lygu := false;
            break;
          end;
  end;

  procedure atmaisyk (var m1 : eile; kiek : integer);
    var i, cikl : integer;
        m2 : eile;
  begin
    cikl := 1;
    maisyk (m1, m2);
    while not lygu (m1, m2) do
    {randa ciklo ilg}
      begin
        maisyk (m2, m2);
        inc (cikl);
      end;
    kiek := kiek mod cikl;
    {jeigu Alisa maiž‚ kortas daugiau kart—, nei susidaro ciklas,
    reikia palikti tik tuos maižymus, kurie nesudaro pilno ciklo}
    for i := 1 to cikl - kiek do
    {kortas maižome tiek kart—, kad jos gr‘t—  pad‚t, nuo kurios
    buvo prad‚tos maižyti}
      maisyk (m1, m1);
  end;

begin
  assign (f, 'cards.in');
  reset (f);
  readln (f, n, kiek);
  for i := 1 to n do
    readln (f, m1[i]);
  close (f);

  atmaisyk (m1, kiek);

  assign (f, 'cards.out');
  rewrite (f);
  for i := 1 to n do
    writeln (f, m1[i]);
  close (f);
end.