#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> solve(vector<int>& A) {
int n = A.size();
vector<int> perm(n);
for (int i = 0; i < n; i++) perm[i] = i;
vector<int> max_power(20, 0);
do {
vector<int> Z(n);
for (int i = 0; i < n; i++) Z[i] = A[perm[i]];
vector<int> power(20, 0);
for (int i = 0; i < 20; i++) {
int mask = 1 << (19 - i);
int max_j = 0;
for (int j = 0; j < n; j++) {
bool all_set = true;
for (int k = 0; k <= j; k++) {
if ((Z[k] & mask) == 0) {
all_set = false;
break;
}
}
if (all_set) max_j = j + 1;
else break;
}
power[i] = max_j;
}
// Check if current power array is greater
bool greater = false;
for (int i = 0; i < 20; i++) {
if (power[i] > max_power[i]) {
greater = true;
break;
} else if (power[i] < max_power[i]) break;
}
if (greater) max_power = power;
} while (next_permutation(perm.begin(), perm.end()));
return max_power;
}
int main() {
// Test case 1: A = [1, 2, 3, 4, 5]
vector<int> A1 = {1, 2, 3, 4, 5};
vector<int> result1 = solve(A1);
cout << "Test 1: ";
for (int x : result1) cout << x;
cout << endl;
// Test case 2: A = [4, 16, 16, 36, 36]
vector<int> A2 = {4, 16, 16, 36, 36};
vector<int> result2 = solve(A2);
cout << "Test 2: ";
for (int x : result2) cout << x;
cout << endl;
// Test case 3: A = [5, 5, 3, 2, 1, 1]
vector<int> A3 = {5, 5, 3, 2, 1, 1};
vector<int> result3 = solve(A3);
cout << "Test 3: ";
for (int x : result3) cout << x;
cout << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8YWxnb3JpdGhtPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnZlY3RvcjxpbnQ+IHNvbHZlKHZlY3RvcjxpbnQ+JiBBKSB7CiAgICBpbnQgbiA9IEEuc2l6ZSgpOwogICAgdmVjdG9yPGludD4gcGVybShuKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKSBwZXJtW2ldID0gaTsKICAgIAogICAgdmVjdG9yPGludD4gbWF4X3Bvd2VyKDIwLCAwKTsKICAgIAogICAgZG8gewogICAgICAgIHZlY3RvcjxpbnQ+IFoobik7CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspIFpbaV0gPSBBW3Blcm1baV1dOwogICAgICAgIAogICAgICAgIHZlY3RvcjxpbnQ+IHBvd2VyKDIwLCAwKTsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDIwOyBpKyspIHsKICAgICAgICAgICAgaW50IG1hc2sgPSAxIDw8ICgxOSAtIGkpOwogICAgICAgICAgICBpbnQgbWF4X2ogPSAwOwogICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IG47IGorKykgewogICAgICAgICAgICAgICAgYm9vbCBhbGxfc2V0ID0gdHJ1ZTsKICAgICAgICAgICAgICAgIGZvciAoaW50IGsgPSAwOyBrIDw9IGo7IGsrKykgewogICAgICAgICAgICAgICAgICAgIGlmICgoWltrXSAmIG1hc2spID09IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgYWxsX3NldCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoYWxsX3NldCkgbWF4X2ogPSBqICsgMTsKICAgICAgICAgICAgICAgIGVsc2UgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcG93ZXJbaV0gPSBtYXhfajsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLy8gQ2hlY2sgaWYgY3VycmVudCBwb3dlciBhcnJheSBpcyBncmVhdGVyCiAgICAgICAgYm9vbCBncmVhdGVyID0gZmFsc2U7CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyMDsgaSsrKSB7CiAgICAgICAgICAgIGlmIChwb3dlcltpXSA+IG1heF9wb3dlcltpXSkgewogICAgICAgICAgICAgICAgZ3JlYXRlciA9IHRydWU7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfSBlbHNlIGlmIChwb3dlcltpXSA8IG1heF9wb3dlcltpXSkgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGlmIChncmVhdGVyKSBtYXhfcG93ZXIgPSBwb3dlcjsKICAgICAgICAKICAgIH0gd2hpbGUgKG5leHRfcGVybXV0YXRpb24ocGVybS5iZWdpbigpLCBwZXJtLmVuZCgpKSk7CiAgICAKICAgIHJldHVybiBtYXhfcG93ZXI7Cn0KCmludCBtYWluKCkgewogICAgLy8gVGVzdCBjYXNlIDE6IEEgPSBbMSwgMiwgMywgNCwgNV0KICAgIHZlY3RvcjxpbnQ+IEExID0gezEsIDIsIDMsIDQsIDV9OwogICAgdmVjdG9yPGludD4gcmVzdWx0MSA9IHNvbHZlKEExKTsKICAgIGNvdXQgPDwgIlRlc3QgMTogIjsKICAgIGZvciAoaW50IHggOiByZXN1bHQxKSBjb3V0IDw8IHg7CiAgICBjb3V0IDw8IGVuZGw7CiAgICAKICAgIC8vIFRlc3QgY2FzZSAyOiBBID0gWzQsIDE2LCAxNiwgMzYsIDM2XQogICAgdmVjdG9yPGludD4gQTIgPSB7NCwgMTYsIDE2LCAzNiwgMzZ9OwogICAgdmVjdG9yPGludD4gcmVzdWx0MiA9IHNvbHZlKEEyKTsKICAgIGNvdXQgPDwgIlRlc3QgMjogIjsKICAgIGZvciAoaW50IHggOiByZXN1bHQyKSBjb3V0IDw8IHg7CiAgICBjb3V0IDw8IGVuZGw7CiAgICAKICAgIC8vIFRlc3QgY2FzZSAzOiBBID0gWzUsIDUsIDMsIDIsIDEsIDFdCiAgICB2ZWN0b3I8aW50PiBBMyA9IHs1LCA1LCAzLCAyLCAxLCAxfTsKICAgIHZlY3RvcjxpbnQ+IHJlc3VsdDMgPSBzb2x2ZShBMyk7CiAgICBjb3V0IDw8ICJUZXN0IDM6ICI7CiAgICBmb3IgKGludCB4IDogcmVzdWx0MykgY291dCA8PCB4OwogICAgY291dCA8PCBlbmRsOwogICAgCiAgICByZXR1cm4gMDsKfQo=