#include <iostream>
#include <map>
#include <vector>
#include <boost/multiprecision/cpp_int.hpp>
using namespace std;
using BigInt = boost::multiprecision::cpp_int;
BigInt factorial(unsigned int n)
{
for (BigInt f = 1; ; f *= n--) if (!n) return f;
}
BigInt ithDuplicatedPermutationInv(vector<int> a)
{
int N = a.size();
BigInt i = 1;
map<int, int> c;
for (int x : a) c[x]++;
BigInt P = factorial(N);
for (auto &x : c) P /= factorial(x.second);
for (int j = 0; j < N; j++) {
int s = 0;
for (auto &x : c) {
if (x.first == a[j]) {
i += P * s / (N - j);
P = P * x.second / (N - j);
x.second--;
break;
}
s += x.second;
}
}
return i;
}
template <typename T> ostream &operator<<(ostream &os, const vector<T> &v)
{
for (auto &x : v) os << (&x == &v[0] ? "[" : ", ") << x;
cout << "]";
return os;
}
const vector<int> nothing = {};
vector<int> Q[] = {
{1, 2, 3, 4, 5, 6, 7, 8, 9},
{1, 2, 3, 4, 5, 6, 7, 9, 8},
{1, 2, 3, 4, 5, 6, 8, 7, 9},
{9, 8, 7, 6, 5, 4, 3, 2, 1},
nothing,
{1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4},
{1, 1, 1, 2, 2, 2, 3, 3, 4, 3, 4, 4},
{1, 1, 1, 2, 2, 2, 3, 3, 4, 4, 3, 4},
{2, 2, 2, 3, 3, 1, 4, 3, 4, 1, 1, 4},
{3, 2, 4, 4, 2, 4, 3, 3, 1, 1, 1, 2},
{4, 4, 4, 3, 3, 3, 2, 2, 2, 1, 1, 1},
nothing,
{1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5},
{1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 5, 4, 5, 5},
{1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 5, 5, 4, 5},
{1, 1, 1, 3, 3, 3, 4, 4, 2, 5, 4, 5, 2, 2, 5},
{1, 1, 1, 4, 3, 5, 5, 3, 5, 4, 4, 2, 2, 2, 3},
{1, 1, 1, 5, 5, 5, 4, 4, 4, 3, 3, 3, 2, 2, 2},
{5, 5, 5, 4, 4, 4, 3, 3, 3, 2, 2, 2, 1, 1, 1},
nothing,
{1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5,
6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10},
{1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5,
6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 9, 9, 9, 9, 10, 9, 10, 10, 10, 10},
{1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5,
6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 9, 10, 10, 10},
{1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5,
6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 8, 9, 9, 10, 10, 8, 8, 9, 8, 8, 9, 10, 10, 10, 9},
{1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5,
6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 8, 10, 10, 9, 8, 8, 9, 10, 10, 8, 9, 10, 9, 8, 9},
{10, 10, 10, 10, 10, 9, 9, 9, 9, 9, 8, 8, 8, 8, 8, 7, 7, 7, 7, 7, 6, 6, 6, 6, 6,
5, 5, 5, 5, 5, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1},
nothing,
{3, 1, 4, 1, 5, 9}
};
int main(void)
{
for (auto &q : Q) {
if (q.size()) {
cout << "入力: " << q << endl;
cout << "出力: " << ithDuplicatedPermutationInv(q) << endl;
}
cout << endl;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWFwPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8Ym9vc3QvbXVsdGlwcmVjaXNpb24vY3BwX2ludC5ocHA+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwp1c2luZyBCaWdJbnQgPSBib29zdDo6bXVsdGlwcmVjaXNpb246OmNwcF9pbnQ7CgpCaWdJbnQgZmFjdG9yaWFsKHVuc2lnbmVkIGludCBuKQp7CiAgICBmb3IgKEJpZ0ludCBmID0gMTsgOyBmICo9IG4tLSkgaWYgKCFuKSByZXR1cm4gZjsKfQoKQmlnSW50IGl0aER1cGxpY2F0ZWRQZXJtdXRhdGlvbkludih2ZWN0b3I8aW50PiBhKQp7CiAgICBpbnQgTiA9IGEuc2l6ZSgpOwogICAgQmlnSW50IGkgPSAxOwoKICAgIG1hcDxpbnQsIGludD4gYzsKICAgIGZvciAoaW50IHggOiBhKSBjW3hdKys7CgogICAgQmlnSW50IFAgPSBmYWN0b3JpYWwoTik7CiAgICBmb3IgKGF1dG8gJnggOiBjKSBQIC89IGZhY3RvcmlhbCh4LnNlY29uZCk7CgogICAgZm9yIChpbnQgaiA9IDA7IGogPCBOOyBqKyspIHsKICAgICAgICBpbnQgcyA9IDA7CiAgICAgICAgZm9yIChhdXRvICZ4IDogYykgewogICAgICAgICAgICBpZiAoeC5maXJzdCA9PSBhW2pdKSB7CiAgICAgICAgICAgICAgICBpICs9IFAgKiBzIC8gKE4gLSBqKTsKICAgICAgICAgICAgICAgIFAgPSBQICogeC5zZWNvbmQgLyAoTiAtIGopOwogICAgICAgICAgICAgICAgeC5zZWNvbmQtLTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHMgKz0geC5zZWNvbmQ7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiBpOwp9Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gb3N0cmVhbSAmb3BlcmF0b3I8PChvc3RyZWFtICZvcywgY29uc3QgdmVjdG9yPFQ+ICZ2KQp7CiAgICBmb3IgKGF1dG8gJnggOiB2KSBvcyA8PCAoJnggPT0gJnZbMF0gPyAiWyIgOiAiLCAiKSA8PCB4OwogICAgY291dCA8PCAiXSI7CiAgICByZXR1cm4gb3M7Cn0KCmNvbnN0IHZlY3RvcjxpbnQ+IG5vdGhpbmcgPSB7fTsKCnZlY3RvcjxpbnQ+IFFbXSA9IHsKICAgIHsxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5fSwKICAgIHsxLCAyLCAzLCA0LCA1LCA2LCA3LCA5LCA4fSwKICAgIHsxLCAyLCAzLCA0LCA1LCA2LCA4LCA3LCA5fSwKICAgIHs5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxfSwKICAgIG5vdGhpbmcsCiAgICB7MSwgMSwgMSwgMiwgMiwgMiwgMywgMywgMywgNCwgNCwgNH0sCiAgICB7MSwgMSwgMSwgMiwgMiwgMiwgMywgMywgNCwgMywgNCwgNH0sCiAgICB7MSwgMSwgMSwgMiwgMiwgMiwgMywgMywgNCwgNCwgMywgNH0sCiAgICB7MiwgMiwgMiwgMywgMywgMSwgNCwgMywgNCwgMSwgMSwgNH0sCiAgICB7MywgMiwgNCwgNCwgMiwgNCwgMywgMywgMSwgMSwgMSwgMn0sCiAgICB7NCwgNCwgNCwgMywgMywgMywgMiwgMiwgMiwgMSwgMSwgMX0sCiAgICBub3RoaW5nLAogICAgezEsIDEsIDEsIDIsIDIsIDIsIDMsIDMsIDMsIDQsIDQsIDQsIDUsIDUsIDV9LAogICAgezEsIDEsIDEsIDIsIDIsIDIsIDMsIDMsIDMsIDQsIDQsIDUsIDQsIDUsIDV9LAogICAgezEsIDEsIDEsIDIsIDIsIDIsIDMsIDMsIDMsIDQsIDQsIDUsIDUsIDQsIDV9LAogICAgezEsIDEsIDEsIDMsIDMsIDMsIDQsIDQsIDIsIDUsIDQsIDUsIDIsIDIsIDV9LAogICAgezEsIDEsIDEsIDQsIDMsIDUsIDUsIDMsIDUsIDQsIDQsIDIsIDIsIDIsIDN9LAogICAgezEsIDEsIDEsIDUsIDUsIDUsIDQsIDQsIDQsIDMsIDMsIDMsIDIsIDIsIDJ9LAogICAgezUsIDUsIDUsIDQsIDQsIDQsIDMsIDMsIDMsIDIsIDIsIDIsIDEsIDEsIDF9LAogICAgbm90aGluZywKICAgIHsxLCAxLCAxLCAxLCAxLCAyLCAyLCAyLCAyLCAyLCAzLCAzLCAzLCAzLCAzLCA0LCA0LCA0LCA0LCA0LCA1LCA1LCA1LCA1LCA1LCAKICAgICA2LCA2LCA2LCA2LCA2LCA3LCA3LCA3LCA3LCA3LCA4LCA4LCA4LCA4LCA4LCA5LCA5LCA5LCA5LCA5LCAxMCwgMTAsIDEwLCAxMCwgMTB9LAogICAgezEsIDEsIDEsIDEsIDEsIDIsIDIsIDIsIDIsIDIsIDMsIDMsIDMsIDMsIDMsIDQsIDQsIDQsIDQsIDQsIDUsIDUsIDUsIDUsIDUsCiAgICAgNiwgNiwgNiwgNiwgNiwgNywgNywgNywgNywgNywgOCwgOCwgOCwgOCwgOCwgOSwgOSwgOSwgOSwgMTAsIDksIDEwLCAxMCwgMTAsIDEwfSwKICAgIHsxLCAxLCAxLCAxLCAxLCAyLCAyLCAyLCAyLCAyLCAzLCAzLCAzLCAzLCAzLCA0LCA0LCA0LCA0LCA0LCA1LCA1LCA1LCA1LCA1LAogICAgIDYsIDYsIDYsIDYsIDYsIDcsIDcsIDcsIDcsIDcsIDgsIDgsIDgsIDgsIDgsIDksIDksIDksIDksIDEwLCAxMCwgOSwgMTAsIDEwLCAxMH0sCiAgICB7MSwgMSwgMSwgMSwgMSwgMiwgMiwgMiwgMiwgMiwgMywgMywgMywgMywgMywgNCwgNCwgNCwgNCwgNCwgNSwgNSwgNSwgNSwgNSwKICAgICA2LCA2LCA2LCA2LCA2LCA3LCA3LCA3LCA3LCA3LCA4LCA5LCA5LCAxMCwgMTAsIDgsIDgsIDksIDgsIDgsIDksIDEwLCAxMCwgMTAsIDl9LAogICAgezEsIDEsIDEsIDEsIDEsIDIsIDIsIDIsIDIsIDIsIDMsIDMsIDMsIDMsIDMsIDQsIDQsIDQsIDQsIDQsIDUsIDUsIDUsIDUsIDUsCiAgICAgNiwgNiwgNiwgNiwgNiwgNywgNywgNywgNywgNywgOCwgMTAsIDEwLCA5LCA4LCA4LCA5LCAxMCwgMTAsIDgsIDksIDEwLCA5LCA4LCA5fSwKICAgIHsxMCwgMTAsIDEwLCAxMCwgMTAsIDksIDksIDksIDksIDksIDgsIDgsIDgsIDgsIDgsIDcsIDcsIDcsIDcsIDcsIDYsIDYsIDYsIDYsIDYsCiAgICAgNSwgNSwgNSwgNSwgNSwgNCwgNCwgNCwgNCwgNCwgMywgMywgMywgMywgMywgMiwgMiwgMiwgMiwgMiwgMSwgMSwgMSwgMSwgMX0sCiAgICBub3RoaW5nLAogICAgezMsIDEsIDQsIDEsIDUsIDl9Cn07CgppbnQgbWFpbih2b2lkKQp7CiAgICBmb3IgKGF1dG8gJnEgOiBRKSB7CiAgICAgICAgaWYgKHEuc2l6ZSgpKSB7CiAgICAgICAgICAgIGNvdXQgPDwgIuWFpeWKmzogIiA8PCBxIDw8IGVuZGw7CiAgICAgICAgICAgIGNvdXQgPDwgIuWHuuWKmzogIiA8PCBpdGhEdXBsaWNhdGVkUGVybXV0YXRpb25JbnYocSkgPDwgZW5kbDsKICAgICAgICB9CiAgICAgICAgY291dCA8PCBlbmRsOwogICAgfQoKICAgIHJldHVybiAwOwp9
入力: [1, 2, 3, 4, 5, 6, 7, 8, 9]
出力: 1
入力: [1, 2, 3, 4, 5, 6, 7, 9, 8]
出力: 2
入力: [1, 2, 3, 4, 5, 6, 8, 7, 9]
出力: 3
入力: [9, 8, 7, 6, 5, 4, 3, 2, 1]
出力: 362880
入力: [1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4]
出力: 1
入力: [1, 1, 1, 2, 2, 2, 3, 3, 4, 3, 4, 4]
出力: 2
入力: [1, 1, 1, 2, 2, 2, 3, 3, 4, 4, 3, 4]
出力: 3
入力: [2, 2, 2, 3, 3, 1, 4, 3, 4, 1, 1, 4]
出力: 123456
入力: [3, 2, 4, 4, 2, 4, 3, 3, 1, 1, 1, 2]
出力: 234567
入力: [4, 4, 4, 3, 3, 3, 2, 2, 2, 1, 1, 1]
出力: 369600
入力: [1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5]
出力: 1
入力: [1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 5, 4, 5, 5]
出力: 2
入力: [1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 5, 5, 4, 5]
出力: 3
入力: [1, 1, 1, 3, 3, 3, 4, 4, 2, 5, 4, 5, 2, 2, 5]
出力: 123456
入力: [1, 1, 1, 4, 3, 5, 5, 3, 5, 4, 4, 2, 2, 2, 3]
出力: 234567
入力: [1, 1, 1, 5, 5, 5, 4, 4, 4, 3, 3, 3, 2, 2, 2]
出力: 369600
入力: [5, 5, 5, 4, 4, 4, 3, 3, 3, 2, 2, 2, 1, 1, 1]
出力: 168168000
入力: [1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10]
出力: 1
入力: [1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 9, 9, 9, 9, 10, 9, 10, 10, 10, 10]
出力: 2
入力: [1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 9, 10, 10, 10]
出力: 3
入力: [1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 8, 9, 9, 10, 10, 8, 8, 9, 8, 8, 9, 10, 10, 10, 9]
出力: 123456
入力: [1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 8, 10, 10, 9, 8, 8, 9, 10, 10, 8, 9, 10, 9, 8, 9]
出力: 234567
入力: [10, 10, 10, 10, 10, 9, 9, 9, 9, 9, 8, 8, 8, 8, 8, 7, 7, 7, 7, 7, 6, 6, 6, 6, 6, 5, 5, 5, 5, 5, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1]
出力: 49120458506088132224064306071170476903628800
入力: [3, 1, 4, 1, 5, 9]
出力: 127