#include <iostream>
uint32_t firstPermutation(uint32_t &p){
return (1 << p) -1;
}
uint32_t lastPermutation(uint32_t &p){
return (0xFFFFFFFF >> p) ^ 0xFFFFFFFF;
}
uint32_t nextPermutation(uint32_t &p){
uint32_t t = (p | (p - 1));
return (t + 1) | (((~t & -~t) - 1) >> (__builtin_ctz(p) + 1));
}
int sumIndices(uint32_t n){
int sum = 0;
do sum += __builtin_ctz(n);
while (n &= n-1);
return sum;
}
int main(int argc, char **argv){
uint32_t n, // bit set
k, // sum of indicies
p, // current permutation
lp; // final permutation
std::cin >> k;
std::cin >> n;
//k = std::atoi(argv[1]);
//n = std::atoi(argv[2]);
p = firstPermutation(n);
lp = lastPermutation(n);
do {
p = nextPermutation(p);
if (sumIndices(p) == k){
std::cout << p << std::endl;
}
} while(p != lp);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdWludDMyX3QgZmlyc3RQZXJtdXRhdGlvbih1aW50MzJfdCAmcCl7CiAgICByZXR1cm4gKDEgPDwgcCkgLTE7Cn0KCnVpbnQzMl90IGxhc3RQZXJtdXRhdGlvbih1aW50MzJfdCAmcCl7CiAgICByZXR1cm4gKDB4RkZGRkZGRkYgPj4gcCkgXiAweEZGRkZGRkZGOwp9Cgp1aW50MzJfdCBuZXh0UGVybXV0YXRpb24odWludDMyX3QgJnApewogICAgdWludDMyX3QgdCA9IChwIHwgKHAgLSAxKSk7CiAgICByZXR1cm4gKHQgKyAxKSB8ICgoKH50ICYgLX50KSAtIDEpID4+IChfX2J1aWx0aW5fY3R6KHApICsgMSkpOwp9CgppbnQgc3VtSW5kaWNlcyh1aW50MzJfdCBuKXsKICAgIGludCBzdW0gPSAwOwogICAgZG8gc3VtICs9IF9fYnVpbHRpbl9jdHoobik7CiAgICB3aGlsZSAobiAmPSBuLTEpOwogICAgcmV0dXJuIHN1bTsKfQoKaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KXsKICAgIHVpbnQzMl90IG4sICAvLyBiaXQgc2V0CiAgICAgICAgICAgICBrLCAgLy8gc3VtIG9mIGluZGljaWVzCiAgICAgICAgICAgICBwLCAgLy8gY3VycmVudCBwZXJtdXRhdGlvbgogICAgICAgICAgICAgbHA7IC8vIGZpbmFsIHBlcm11dGF0aW9uCgoKICAgIHN0ZDo6Y2luID4+IGs7CglzdGQ6OmNpbiA+PiBuOwoKCS8vayA9IHN0ZDo6YXRvaShhcmd2WzFdKTsKICAgIC8vbiA9IHN0ZDo6YXRvaShhcmd2WzJdKTsKCiAgICBwID0gZmlyc3RQZXJtdXRhdGlvbihuKTsKICAgIGxwID0gbGFzdFBlcm11dGF0aW9uKG4pOwoKICAgIGRvIHsKICAgICAgICBwID0gbmV4dFBlcm11dGF0aW9uKHApOwogICAgICAgIGlmIChzdW1JbmRpY2VzKHApID09IGspewogICAgICAgICAgICBzdGQ6OmNvdXQgPDwgcCA8PCBzdGQ6OmVuZGw7CiAgICAgICAgfQogICAgfSB3aGlsZShwICE9IGxwKTsKCiAgICByZXR1cm4gMDsKfQo=