// Output all 3-digit numbers with unique digits in order. (2.01)
#include <numeric>
#include <algorithm>
#include <vector>
#include <iostream>
using namespace std;
int factorial(int n)
{
if (n == 0)
return 1;
return n * factorial(n - 1);
}
template<typename InputIt>
int digitsToInt(InputIt first, InputIt last)
{
return accumulate(first, last, 0, [](int x, int y){ return 10*x + y; });
}
int main()
{
int n = 10;
int k = 3;
vector<int> v(n);
auto first = v.begin(), last = v.end();
iota(first, last, 0);
int n_skip = factorial(n - k) - 1;
do
{
if (*first != 0)
cout << digitsToInt(first, next(first, k)) << ' ';
for (int i = 0; i < n_skip; i++)
next_permutation(first, last);
}
while (next_permutation(first, last));
}
Ly8gT3V0cHV0IGFsbCAzLWRpZ2l0IG51bWJlcnMgd2l0aCB1bmlxdWUgZGlnaXRzIGluIG9yZGVyLiAoMi4wMSkKCiNpbmNsdWRlIDxudW1lcmljPgojaW5jbHVkZSA8YWxnb3JpdGhtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8aW9zdHJlYW0+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgZmFjdG9yaWFsKGludCBuKQp7CiAgICBpZiAobiA9PSAwKQogICAgICAgIHJldHVybiAxOwogICAgcmV0dXJuIG4gKiBmYWN0b3JpYWwobiAtIDEpOwp9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBJbnB1dEl0PgppbnQgZGlnaXRzVG9JbnQoSW5wdXRJdCBmaXJzdCwgSW5wdXRJdCBsYXN0KQp7CiAgICByZXR1cm4gYWNjdW11bGF0ZShmaXJzdCwgbGFzdCwgMCwgW10oaW50IHgsIGludCB5KXsgcmV0dXJuIDEwKnggKyB5OyB9KTsKfQoKaW50IG1haW4oKQp7CiAgICBpbnQgbiA9IDEwOwogICAgaW50IGsgPSAzOwoKICAgIHZlY3RvcjxpbnQ+IHYobik7CiAgICBhdXRvIGZpcnN0ID0gdi5iZWdpbigpLCBsYXN0ID0gdi5lbmQoKTsKICAgIGlvdGEoZmlyc3QsIGxhc3QsIDApOwogICAgaW50IG5fc2tpcCA9IGZhY3RvcmlhbChuIC0gaykgLSAxOwogICAgZG8KICAgIHsKICAgICAgICBpZiAoKmZpcnN0ICE9IDApCiAgICAgICAgICAgIGNvdXQgPDwgZGlnaXRzVG9JbnQoZmlyc3QsIG5leHQoZmlyc3QsIGspKSA8PCAnICc7CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuX3NraXA7IGkrKykKICAgICAgICAgICAgbmV4dF9wZXJtdXRhdGlvbihmaXJzdCwgbGFzdCk7CiAgICB9CiAgICB3aGlsZSAobmV4dF9wZXJtdXRhdGlvbihmaXJzdCwgbGFzdCkpOwp9