#include <iostream>
#include <set>
#include <array>
#include <algorithm>
#include <vector>
using namespace std;
const size_t N = 10;
typedef array<size_t, N> perm;
typedef set<perm> perms;
perms s;
void init (perms& s) {
s.clear();
perm ta;
for (size_t i = 0; i < N; ++i) ta[i] = i+1;
s.insert(ta);
while(next_permutation(ta.begin(), ta.end()))
s.insert(ta);
}
size_t sieve (perms& s, pair<size_t, size_t> p) {
vector<perm> for_insert;
vector<perms::iterator> for_erase;
for (auto sit = s.begin(); sit != s.end(); ++sit) {
auto first = p.first - 1;
auto second = p.second - 1;
if ((*sit)[first] > (*sit)[second]) {
for_erase.push_back(sit);
for_insert.push_back(*sit);
swap(for_insert.back()[first], for_insert.back()[second]);
}
}
for (auto& eit: for_erase)
s.erase(eit);
for (auto& a: for_insert) {
bool t = s.insert(a).second;
//if (t) cout << "INSERT!" << endl;
}
return s.size();
}
void show (const perms& s) {
cout << s.size() << " total:" << endl;
for (auto& a: s) {
for (auto& e: a) cout << e;
cout << endl;
}
}
int main() {
init(s);
cout << s.size() << endl;
cout << sieve(s, {1, 6}) << endl;
cout << sieve(s, {2, 7}) << endl;
cout << sieve(s, {3, 8}) << endl;
cout << sieve(s, {4, 9}) << endl;
cout << sieve(s, {5, 10}) << endl;
cout << sieve(s, {2, 4}) << endl;
cout << sieve(s, {3, 5}) << endl;
cout << sieve(s, {6, 8}) << endl;
cout << sieve(s, {7, 9}) << endl;
cout << sieve(s, {2, 3}) << endl;
cout << sieve(s, {1, 2}) << endl;
cout << sieve(s, {8, 9}) << endl;
cout << sieve(s, {9, 10}) << endl;
cout << sieve(s, {2, 9}) << endl;
cout << sieve(s, {4, 6}) << endl;
cout << sieve(s, {5, 7}) << endl;
cout << sieve(s, {2, 4}) << endl;
cout << sieve(s, {3, 5}) << endl;
cout << sieve(s, {6, 8}) << endl;
cout << sieve(s, {7, 9}) << endl;
cout << sieve(s, {2, 3}) << endl;
cout << sieve(s, {8, 9}) << endl;
cout << sieve(s, {4, 6}) << endl;
cout << sieve(s, {5, 7}) << endl;
cout << sieve(s, {4, 5}) << endl;
cout << sieve(s, {6, 7}) << endl;
cout << sieve(s, {3, 4}) << endl;
cout << sieve(s, {7, 8}) << endl;
cout << sieve(s, {5, 6}) << endl;
cout << sieve(s, {4, 5}) << endl;
cout << sieve(s, {6, 7}) << endl;
show(s);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c2V0PgojaW5jbHVkZSA8YXJyYXk+CiNpbmNsdWRlIDxhbGdvcml0aG0+CiNpbmNsdWRlIDx2ZWN0b3I+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpjb25zdCBzaXplX3QgTiA9IDEwOwp0eXBlZGVmIGFycmF5PHNpemVfdCwgTj4gcGVybTsKdHlwZWRlZiBzZXQ8cGVybT4gcGVybXM7CgpwZXJtcyBzOwoKdm9pZCBpbml0IChwZXJtcyYgcykgewoJcy5jbGVhcigpOwoJcGVybSB0YTsKCWZvciAoc2l6ZV90IGkgPSAwOyBpIDwgTjsgKytpKSB0YVtpXSA9IGkrMTsKCXMuaW5zZXJ0KHRhKTsKCXdoaWxlKG5leHRfcGVybXV0YXRpb24odGEuYmVnaW4oKSwgdGEuZW5kKCkpKQoJCXMuaW5zZXJ0KHRhKTsKfQoKc2l6ZV90IHNpZXZlIChwZXJtcyYgcywgcGFpcjxzaXplX3QsIHNpemVfdD4gcCkgewoJdmVjdG9yPHBlcm0+IGZvcl9pbnNlcnQ7Cgl2ZWN0b3I8cGVybXM6Oml0ZXJhdG9yPiBmb3JfZXJhc2U7CgkKCWZvciAoYXV0byBzaXQgPSBzLmJlZ2luKCk7IHNpdCAhPSBzLmVuZCgpOyArK3NpdCkgewoJCWF1dG8gZmlyc3QgPSBwLmZpcnN0IC0gMTsKCQlhdXRvIHNlY29uZCA9IHAuc2Vjb25kIC0gMTsKCQlpZiAoKCpzaXQpW2ZpcnN0XSA+ICgqc2l0KVtzZWNvbmRdKSB7CgkJCWZvcl9lcmFzZS5wdXNoX2JhY2soc2l0KTsKCQkJZm9yX2luc2VydC5wdXNoX2JhY2soKnNpdCk7CgkJCXN3YXAoZm9yX2luc2VydC5iYWNrKClbZmlyc3RdLCBmb3JfaW5zZXJ0LmJhY2soKVtzZWNvbmRdKTsKCQl9Cgl9CgkKCWZvciAoYXV0byYgZWl0OiBmb3JfZXJhc2UpCgkJcy5lcmFzZShlaXQpOwoJCQoJZm9yIChhdXRvJiBhOiBmb3JfaW5zZXJ0KSB7CgkJYm9vbCB0ID0gcy5pbnNlcnQoYSkuc2Vjb25kOwoJCS8vaWYgKHQpIGNvdXQgPDwgIklOU0VSVCEiIDw8IGVuZGw7CQkKCX0KCQoJcmV0dXJuIHMuc2l6ZSgpOwp9Cgp2b2lkIHNob3cgKGNvbnN0IHBlcm1zJiBzKSB7Cgljb3V0IDw8IHMuc2l6ZSgpIDw8ICAiIHRvdGFsOiIgPDwgZW5kbDsKCWZvciAoYXV0byYgYTogcykgewoJCWZvciAoYXV0byYgZTogYSkgY291dCA8PCBlOwoJCWNvdXQgPDwgZW5kbDsKCX0KfQoKaW50IG1haW4oKSB7Cglpbml0KHMpOwoJY291dCA8PCBzLnNpemUoKSA8PCBlbmRsOwoJCgljb3V0IDw8IHNpZXZlKHMsIHsxLCA2fSkgPDwgZW5kbDsKCWNvdXQgPDwgc2lldmUocywgezIsIDd9KSA8PCBlbmRsOwoJY291dCA8PCBzaWV2ZShzLCB7MywgOH0pIDw8IGVuZGw7Cgljb3V0IDw8IHNpZXZlKHMsIHs0LCA5fSkgPDwgZW5kbDsKCWNvdXQgPDwgc2lldmUocywgezUsIDEwfSkgPDwgZW5kbDsKCgljb3V0IDw8IHNpZXZlKHMsIHsyLCA0fSkgPDwgZW5kbDsKCWNvdXQgPDwgc2lldmUocywgezMsIDV9KSA8PCBlbmRsOwoJY291dCA8PCBzaWV2ZShzLCB7NiwgOH0pIDw8IGVuZGw7Cgljb3V0IDw8IHNpZXZlKHMsIHs3LCA5fSkgPDwgZW5kbDsKCQoJY291dCA8PCBzaWV2ZShzLCB7MiwgM30pIDw8IGVuZGw7Cgljb3V0IDw8IHNpZXZlKHMsIHsxLCAyfSkgPDwgZW5kbDsKCWNvdXQgPDwgc2lldmUocywgezgsIDl9KSA8PCBlbmRsOwoJY291dCA8PCBzaWV2ZShzLCB7OSwgMTB9KSA8PCBlbmRsOwoJCgljb3V0IDw8IHNpZXZlKHMsIHsyLCA5fSkgPDwgZW5kbDsKCWNvdXQgPDwgc2lldmUocywgezQsIDZ9KSA8PCBlbmRsOwoJY291dCA8PCBzaWV2ZShzLCB7NSwgN30pIDw8IGVuZGw7Cgljb3V0IDw8IHNpZXZlKHMsIHsyLCA0fSkgPDwgZW5kbDsKCWNvdXQgPDwgc2lldmUocywgezMsIDV9KSA8PCBlbmRsOwoJY291dCA8PCBzaWV2ZShzLCB7NiwgOH0pIDw8IGVuZGw7Cgljb3V0IDw8IHNpZXZlKHMsIHs3LCA5fSkgPDwgZW5kbDsKCWNvdXQgPDwgc2lldmUocywgezIsIDN9KSA8PCBlbmRsOwoJY291dCA8PCBzaWV2ZShzLCB7OCwgOX0pIDw8IGVuZGw7CgoJY291dCA8PCBzaWV2ZShzLCB7NCwgNn0pIDw8IGVuZGw7Cgljb3V0IDw8IHNpZXZlKHMsIHs1LCA3fSkgPDwgZW5kbDsKCWNvdXQgPDwgc2lldmUocywgezQsIDV9KSA8PCBlbmRsOwoJY291dCA8PCBzaWV2ZShzLCB7NiwgN30pIDw8IGVuZGw7Cgljb3V0IDw8IHNpZXZlKHMsIHszLCA0fSkgPDwgZW5kbDsKCWNvdXQgPDwgc2lldmUocywgezcsIDh9KSA8PCBlbmRsOwkKCgljb3V0IDw8IHNpZXZlKHMsIHs1LCA2fSkgPDwgZW5kbDsKCWNvdXQgPDwgc2lldmUocywgezQsIDV9KSA8PCBlbmRsOwoJY291dCA8PCBzaWV2ZShzLCB7NiwgN30pIDw8IGVuZGw7CgoKCgoKCQoJCgkKCQoKCXNob3cocyk7CgkKICAgIHJldHVybiAwOwp9Cg==