1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#include <cstdlib>
#include <iostream>

using namespace std;

int potega(int a, int w)
{
    if (w==0)
       return 1;
    if (w%2==0)
       {
               int b = potega(a,w/2);
               return b*b;
       }

               int b = potega(a,(w-1)/2);
               return b*b*a;
    
}


void wypisz(int tab[], int n)
{
     for (int i=0; i<n; i++)
         cout<<tab[i]<<" ";
     cout<<endl;
}

void odwroc (int tab[], int p, int k)
{
     for(int i=p; i<(p+k)/2.0; i++)
     {
             int tmp=tab[i];
             tab[i]=tab[k+p-i];
             tab[k+p-i]=tmp;
     }
}

void tasuj(int tab[], int p, int k, long long t)
{
     if (t%2==0)
        wypisz(tab,k);
     else
     {
         odwroc(tab,0,k-1);
         wypisz(tab, k);         
     }
}

int main(int argc, char *argv[])
{
    //wczytanie danych:
    int n;
    long long t;
    scanf("%d %d", &n, &t);
    long long p=potega(2,n);
    int tab[p];
    
    for (long long i=0; i<p; i++)
        cin>>tab[i];

    //program:
    tasuj(tab,0,p,t);
    
    
    
    
    //system("PAUSE");
    return EXIT_SUCCESS;
}