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
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
#include <bits/stdc++.h>

using namespace std;
#define INF 1010000000
#define EPS 1E-12
#define MP make_pair
#define ST first
#define ND second
#define REP(i, n) for(int i = 0; i < (n); ++i)
#define REPD(i, n) for(int i = (n) - 1; i >= 0; --i)
#define FOR(i, a, n) for(int i = (a); i <= (n); ++i)
#define FORD(i, a, n) for(int i = (a); i >= (n); --i)
#define DD(x, args...) { vector<string> _v = _split(#args, ','); _err(x, _v.begin(), args); }
#define D(args...) DD(", ", args)
#define DE(args...) DD("\n", args)
#define D2(a, args...) { cerr << a << ": "; D(args); }
#define DD2(x, a, args...) { cerr << a << ": "; DD(x, args); }
#define E cerr << endl;
#define OUT(...) ostream &operator<<(ostream &ost, const __VA_ARGS__ &_cnt) { return _out(ost, ALL(_cnt)); }
#define SZ(x) ((int)(x).size())
#define PB push_back
#define EB emplace_back
#define ALL(x) x.begin(), x.end()
#define endl '\n'

typedef long long LL;
typedef unsigned long long ULL;
typedef pair<int, int> PII;
typedef pair<LL, LL> PLL;
typedef pair<double, double> PDD;

template<class c1> ostream &_out(ostream &ost, c1 a, c1 b);

template<class T1, class T2> ostream &operator<<(ostream &ost, const pair<T1, T2> &_cnt);

template<class T1> OUT(vector<T1>);
template<class T1> OUT(deque<T1>);
template<class T1> OUT(list<T1>);
template<class T1, class T2> OUT(set<T1, T2>);
template<class T1, class T2> OUT(multiset<T1, T2>);
template<class T1, class T2, class T3> OUT(map<T1, T2, T3>);
template<class T1, class T2, class T3> OUT(multimap<T1, T2, T3>);

template<class T1, class T2> 
ostream &operator<<(ostream &ost, const pair<T1, T2> &_cnt)
	{ return ost << '(' << _cnt.ST << ", " << _cnt.ND << ')'; }

template<class T1>
ostream &_out(ostream &ost, T1 a, T1 b)
	{ ost << '{'; if(a != b) { ost << *a; while(++a != b) ost << ", " << *a; } return ost << '}'; }

vector<string> _split(const string &s, char c) {
	int br = 0;
	vector<string> v(1);
	REP(i, SZ(s)) {
		if(s[i] == '[' || s[i] == '(' || s[i] == '{'/* || s[i] == '<'*/) br++;
		else if(s[i] == ']' || s[i] == ')' || s[i] == '}'/* || s[i] == '>'*/) br--;
		if(s[i] == c && br == 0) v.PB("");
		else v.back().PB(s[i]);
  }
  return v;
}

template<class T1>
void _err(string del, vector<string>::iterator it, T1 a) { 
	bool wb = (*it)[0] == ' ', we = (*it).back() == ' ';
	cerr << it -> substr(wb, SZ(*it) - wb - we) << " = " << a << endl; 
	(void)del;
}
template<class T1, class... Args>
void _err(string del, vector<string>::iterator it, T1 a, Args... args) { 
	bool wb = (*it)[0] == ' ', we = (*it).back() == ' ';
	cerr << it -> substr(wb, SZ(*it) - wb - we) << " = " << a << del; 
	_err(del, ++it, args...); 
}

/////////////////////////////////////////////////////////////////////

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);
	
	int n, k;
	cin >> n >> k;
	k %= 2;
	n = 1 << n;
	
	vector<int> v(n);
	REP(i, n)
		cin >> v[i];
	
	if(k) {
		REPD(i, n)
			cout << v[i] << ' ';
		cout << endl;
	}
	else {
		REP(i, n)
			cout << v[i] << ' ';
		cout << endl;
	}
	
	return 0;
}
/*
2 1
2 4 1 5

2 2
2 4 1 5
*/