#include <bits/stdc++.h>
using namespace std;
using ll = int64_t;
const ll mod = 1000000007;
ll euclid(ll a, ll b, ll &x, ll &y) {
if (!b) return x = 1, y = 0, a;
ll d = euclid(b, a % b, y, x);
return y -= a/b * x, d;
}
struct Mod {
ll x;
Mod(ll xx) : x(xx) {}
Mod operator+(Mod b) { return Mod((x + b.x) % mod); }
Mod operator-(Mod b) { return Mod((x - b.x + mod) % mod); }
Mod operator*(Mod b) { return Mod((x * b.x) % mod); }
Mod operator/(Mod b) { return *this * invert(b); }
Mod invert(Mod a) {
ll x, y, g = euclid(a.x, mod, x, y);
assert(g == 1); return Mod((x + mod) % mod);
}
Mod operator^(ll e) {
if (!e) return Mod(1);
Mod r = *this ^ (e / 2); r = r * r;
return e&1 ? *this * r : r;
}
};
void solve() {
int n;
cin >> n;
vector<int> vs(2 * n);
for(auto& v : vs) {
cin >> v;
}
auto factorial = [] (ll i) -> Mod {
Mod ans = 1;
for(ll j = 2; j <= i; j++) {
ans = ans * j;
}
return ans;
};
if(*min_element(vs.begin(), vs.end()) == *min_element(vs.begin(), vs.end()) && vs[0] != 1) {
Mod ans = 2 * n;
ans = ans * (2 * n - 1);
ans = ans * factorial(4 * n - 2);
ans = ans / (Mod(2) ^ (2 * n));
cout << ans.x % mod;
}
else {
cout << 0;
}
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
//freopen("in", "r", stdin);
//solve();
int t;
cin >> t;
while(t--) {
solve();
cout << "\n";
}
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 | #include <bits/stdc++.h> using namespace std; using ll = int64_t; const ll mod = 1000000007; ll euclid(ll a, ll b, ll &x, ll &y) { if (!b) return x = 1, y = 0, a; ll d = euclid(b, a % b, y, x); return y -= a/b * x, d; } struct Mod { ll x; Mod(ll xx) : x(xx) {} Mod operator+(Mod b) { return Mod((x + b.x) % mod); } Mod operator-(Mod b) { return Mod((x - b.x + mod) % mod); } Mod operator*(Mod b) { return Mod((x * b.x) % mod); } Mod operator/(Mod b) { return *this * invert(b); } Mod invert(Mod a) { ll x, y, g = euclid(a.x, mod, x, y); assert(g == 1); return Mod((x + mod) % mod); } Mod operator^(ll e) { if (!e) return Mod(1); Mod r = *this ^ (e / 2); r = r * r; return e&1 ? *this * r : r; } }; void solve() { int n; cin >> n; vector<int> vs(2 * n); for(auto& v : vs) { cin >> v; } auto factorial = [] (ll i) -> Mod { Mod ans = 1; for(ll j = 2; j <= i; j++) { ans = ans * j; } return ans; }; if(*min_element(vs.begin(), vs.end()) == *min_element(vs.begin(), vs.end()) && vs[0] != 1) { Mod ans = 2 * n; ans = ans * (2 * n - 1); ans = ans * factorial(4 * n - 2); ans = ans / (Mod(2) ^ (2 * n)); cout << ans.x % mod; } else { cout << 0; } } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); //freopen("in", "r", stdin); //solve(); int t; cin >> t; while(t--) { solve(); cout << "\n"; } } |
English