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
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;

void print(vector<int> cards) {
//	cout << "Cards: " << endl;
    for (int card : cards)
	    cout << card << " ";
}

vector<int> shuffle(vector<int> cards ) {
    if (cards.size() == 2) {
       swap(cards[0],cards[1]);
//	   print(cards);
	   return cards;
	}
	else {
        auto second(shuffle(vector<int>(cards.begin(),cards.begin()+cards.size()/2)));
		auto first(shuffle(vector<int>(cards.begin()+cards.size()/2,cards.end())));
		first.insert(first.end(),second.begin(),second.end()); 
		return first;
	}
}

int main () {
	int n, t, tmp;
    vector<int> cards;
	cin >> n >> t;
//	cout << "n: " << n << " t: " << t << endl;
    for (int i=1; i<= pow(2,n); i++) {
		cin >> tmp;
		cards.push_back(tmp);
	}

//	print(cards);
	auto shuffled_cards(shuffle(cards));
	print(shuffled_cards);


	return 0;
}