{ CEOI'98 Penktoji Centrins Europos ali informatikos olimpiada }
{ Zadar, Kroatija }
{ Antras udavinys KORTELS }

{ Sprendim pareng Justas Kranauskas, VTGTM licjus, 12 kl. }

{ IDJA: Pagal suraytus skaiius Alisa idlioja korteles:
  pozicijoje ai yra kortel su numeriu a(i+1).

  Tai reikia, kad idliotas korteles galime vaizduoti grafu
  (t. y. vienu ciklu grafe). Grafas sudaromas taip: jei pozicijoje x
  yra kortel su numeriu y, tai i virns x nukreipiama briauna 
  virn y.

       a1 --> a2 --> a3 -->a4 --> an -- > a1

  Imkime virn a1.
  I jos nukreipta briauna  virn a2 ( virn a su numeriu 2^0 + 1;)
  Po pirmo maiymo i jos bus nukreipta briauna  virn a3 (2^1 + 1);
  Po antro maiymo bus nukreipta  a5 (2^2 + 1);
  ....
  Po k-tojo maiymo bus nukreipta  ax, kur x = 2^k + 1;

  Virns skaiiuojamas moduliu n.
  T. y. x = 2^k mod n + 1;

  Jei rodysime, kad po kurio laiko i a1 briauna bus nukreipta  a2,
  tai korteli idstymas pasikartos. Kadangi graf sudaro vienas ciklas,
  galime pernumeruoti virnes ir gausime, kad tai galioja kiekvienai
  virnei: t. y. po kakiek dvigubo maiymo operacij, i ai bus
  nukreipta briauna  a(i+1).

  I a1 ieinanti 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 maiymo operacij skaiius, 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 natrini skaii ne
  didesni u m ir tarpusavyje pirmini su m.

  Ms atveju a = 2, m = n. kadangi n nelyginis, tai bdd(2, n) = 1. taigi,
  galime taikyti Oilerio teorem. Kai maiymo operacij skaiius taps lygus
  k = fi(n), i a1 ieinanti briauna vl bus nukreipta  a2.

  Taigi, su turimomis kortelmis reikia atlikinti dvigubo maiymo operacijas
  kol vl gausime dabartin situacija. Atlikt maiymo operacij skaii
  (t.y. periodo ilg) paymkime P. Norint gauti pradin korteli
  idstym reikia atlikti (P - S mod P) dvigubo maiymo 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);
  {sumaio 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 isidstymas 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 maiymus, kurie nesudaro pilno ciklo}
    for i := 1 to cikl - kiek do
    {kortas maiome tiek kart, kad jos grt  padt, nuo kurios
    buvo pradtos maiyti}
      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.