#include <iostream>
#include <bitset>
using namespace std;
unsigned long long binomial(unsigned n, unsigned k)
{
if (k > n) return 0;
unsigned result = 1;
for (unsigned d=1; d <= k; d++) {
result *= n--;
result /= d;
}
return result;
}
unsigned long long next_permutation(unsigned long long v)
{
unsigned long long t = (v | (v - 1)) + 1;
return t | ((((t & -t) / (v & -v)) >> 1) - 1);
}
int main()
{
const unsigned n = 5;
const unsigned k = 3;
unsigned long long permutation = (1 << k) - 1;
for (unsigned int i = 0; i < binomial(n,k); ++i)
{
bitset<n> foo(permutation);
cout << foo << '\n';
permutation = next_permutation(permutation);
}
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Yml0c2V0PgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnVuc2lnbmVkIGxvbmcgbG9uZyBiaW5vbWlhbCh1bnNpZ25lZCBuLCB1bnNpZ25lZCBrKQp7CiAgaWYgKGsgPiBuKSByZXR1cm4gMDsKICB1bnNpZ25lZCByZXN1bHQgPSAxOwogIGZvciAodW5zaWduZWQgZD0xOyBkIDw9IGs7IGQrKykgewogICAgcmVzdWx0ICo9IG4tLTsKICAgIHJlc3VsdCAvPSBkOwogIH0KICByZXR1cm4gcmVzdWx0OyAgICAKfQoKdW5zaWduZWQgbG9uZyBsb25nIG5leHRfcGVybXV0YXRpb24odW5zaWduZWQgbG9uZyBsb25nIHYpCnsKICB1bnNpZ25lZCBsb25nIGxvbmcgdCA9ICh2IHwgKHYgLSAxKSkgKyAxOyAgCiAgcmV0dXJuIHQgfCAoKCgodCAmIC10KSAvICh2ICYgLXYpKSA+PiAxKSAtIDEpOwp9CgppbnQgbWFpbigpCnsKICBjb25zdCB1bnNpZ25lZCBuID0gNTsKICBjb25zdCB1bnNpZ25lZCBrID0gMzsKCiAgdW5zaWduZWQgbG9uZyBsb25nIHBlcm11dGF0aW9uID0gKDEgPDwgaykgLSAxOwoKICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGJpbm9taWFsKG4sayk7ICsraSkKICAgIHsKICAgICAgYml0c2V0PG4+IGZvbyhwZXJtdXRhdGlvbik7CiAgICAgIGNvdXQgPDwgZm9vIDw8ICdcbic7CiAgICAgIHBlcm11dGF0aW9uID0gbmV4dF9wZXJtdXRhdGlvbihwZXJtdXRhdGlvbik7CiAgICAgfQp9Cg==