#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 n){
uint32_t t = (n | (n - 1)) + 1;
return t | ((((t & -t) / (n & -n)) >> 1) - 1);
}
int sumIndices(uint32_t n){
const int MultiplyDeBruijnBitPosition[32] = {
0, 1, 28, 2, 29, 14, 24, 3, 30, 22, 20, 15, 25, 17, 4, 8,
31, 27, 13, 23, 21, 19, 16, 7, 26, 12, 18, 6, 11, 5, 10, 9
};
int sum = 0;
do sum += MultiplyDeBruijnBitPosition[((uint32_t)((n & -n) * 0x077CB531U)) >> 27];
while (n &= n-1);
return sum;
}
int main(){
uint32_t n, // bit set
k, // sum of indicies
p, // current permutation
lp; // final permutation
std::cin >> k;
std::cin >> n;
p = firstPermutation(n);
lp = lastPermutation(n);
do {
p = nextPermutation(p);
if (sumIndices(p) == k){
std::cout << "p:" << p << std::endl;
}
} while(p != lp);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdWludDMyX3QgZmlyc3RQZXJtdXRhdGlvbih1aW50MzJfdCBwKXsKICAgIHJldHVybiAoMSA8PCBwKSAtMTsKfQoKdWludDMyX3QgbGFzdFBlcm11dGF0aW9uKHVpbnQzMl90IHApewogICAgcmV0dXJuICgweEZGRkZGRkZGID4+IHApIF4gMHhGRkZGRkZGRjsKfQoKdWludDMyX3QgbmV4dFBlcm11dGF0aW9uKHVpbnQzMl90IG4pewogICAgdWludDMyX3QgdCA9IChuIHwgKG4gLSAxKSkgKyAxOwogICAgcmV0dXJuIHQgfCAoKCgodCAmIC10KSAvIChuICYgLW4pKSA+PiAxKSAtIDEpOwp9CgoKaW50IHN1bUluZGljZXModWludDMyX3Qgbil7CiAgICBjb25zdCBpbnQgTXVsdGlwbHlEZUJydWlqbkJpdFBvc2l0aW9uWzMyXSA9IHsKICAgICAgMCwgMSwgMjgsIDIsIDI5LCAxNCwgMjQsIDMsIDMwLCAyMiwgMjAsIDE1LCAyNSwgMTcsIDQsIDgsCiAgICAgIDMxLCAyNywgMTMsIDIzLCAyMSwgMTksIDE2LCA3LCAyNiwgMTIsIDE4LCA2LCAxMSwgNSwgMTAsIDkKICAgIH07CgogICAgaW50IHN1bSA9IDA7CiAgICBkbyBzdW0gKz0gTXVsdGlwbHlEZUJydWlqbkJpdFBvc2l0aW9uWygodWludDMyX3QpKChuICYgLW4pICogMHgwNzdDQjUzMVUpKSA+PiAyN107CiAgICB3aGlsZSAobiAmPSBuLTEpOwoKICAgIHJldHVybiBzdW07Cn0KCgppbnQgbWFpbigpewogICAgdWludDMyX3QgbiwgIC8vIGJpdCBzZXQKICAgICAgICAgICAgIGssICAvLyBzdW0gb2YgaW5kaWNpZXMKICAgICAgICAgICAgIHAsICAvLyBjdXJyZW50IHBlcm11dGF0aW9uCiAgICAgICAgICAgICBscDsgLy8gZmluYWwgcGVybXV0YXRpb24KCiAgICBzdGQ6OmNpbiA+PiBrOwogICAgc3RkOjpjaW4gPj4gbjsKCiAgICBwID0gZmlyc3RQZXJtdXRhdGlvbihuKTsKICAgIGxwID0gbGFzdFBlcm11dGF0aW9uKG4pOwoKICAgIGRvIHsKICAgICAgICBwID0gbmV4dFBlcm11dGF0aW9uKHApOwogICAgICAgIGlmIChzdW1JbmRpY2VzKHApID09IGspewogICAgICAgICAgICBzdGQ6OmNvdXQgPDwgInA6IiA8PCBwIDw8IHN0ZDo6ZW5kbDsKICAgICAgICB9CiAgICB9IHdoaWxlKHAgIT0gbHApOwoKICAgIHJldHVybiAwOwp9Cg==