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
71
72
73
74
75
76
77
78
79
80
81
#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>
#include <cassert>

#define NUSV1 dkjaskdjfkwui  //zmienna normalnie nie używana w kodzie
#define NUSV2 dkjaskdjhkass

#define POW(i,n) for(int i=0;i<n;++i)
#define POWback(i,n) for(int i=n-1;i>=0;--i)
#define POW_od_do(i,od,n) for(int i=od;i<n;++i)
#define POWod1(i,n) for(int i=1;i<n+1;++i)
//#define POWvec(it,v) for(typeof(v.begin()) it=v.begin();it!=v.end();++it)

// #define MAX(a,b) ((a)>(b) ? (a) : (b))
// #define MIN(a,b) ((a)<(b) ? (a) : (b))
// #define ABS(a) ((a)>0 ? (a) : (-(a)))
#define SQ(a) ((a)*(a))

#define CASE break; case
#define SC second
#define FT first
#define PB push_back
#define MP make_pair
#define INFlli 9223372036854775000
#define INFint 2147483000

typedef long long int LLi;

//better_use_g++_param//#define DEBUG

#ifdef DEBUG
#define LOGendl {cout << "\n" << flush;}
#define LOG(var) {cout << (var) << " " << flush;}
#define LOGv(var) {cout << #var << "=" << (var) << " " << flush;}
#define LOGtab(a,tab) {POW(alala,a) LOG(tab[alala]) LOGendl}
#define LOGtab2(a,b,tab) {POW(alala2,a) LOGtab(b,tab[alala2]) LOGendl}
#define D(...) __VA_ARGS__
#define kreska {POW(alala,5) cout << "-"; cout << "\n" << flush;}
#define kreskai(i) {POW(alala,5*i) cout << "-"; cout << "\n" << flush;}
#define ASSERT(arg) assert(arg)
#define FASTIOSTREAM {LOG("debug") LOGendl kreskai(4) LOG("WARNING!!! DEBUG ON!") LOGendl kreskai(4)}
#else
#define LOGtab2(a,b,tab)
#define LOGtab(a,tab)
#define LOG(var)
#define LOGv(var)
#define D(...)
#define LOGendl
#define kreska
#define kreskai(i)
#define ASSERT(arg)
#define FASTIOSTREAM ios_base::sync_with_stdio(false); cin.tie(nullptr);
#endif

using namespace std;

int main()
{
	FASTIOSTREAM
	int n;
	int t;
	cin >> n >> t;
	n = 1<<n;
	int tab[n];
	for (int i=0; i<n; i++)
        cin >> tab[i];
    if (t%2==1)
    {
        int maska = n-1;
        for (int i=0;i<n;i++)
            cout << tab[i^maska] << " ";
    }
    else
    {
        for (int i=0;i<n;i++)
            cout << tab[i] << " ";
    }
    return 0;
}