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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#include <iostream>
#include <vector>

using namespace std;

const int MOD = 1e9 + 7;

class PotyczkarzeIAlgorytmicy {
public:
    long long szybkieTasowanko(long long base, long long exp) {
        long long res = 1;
        base %= MOD;
        while (exp > 0) {
            if (exp % 2 == 1) res = (res * base) % MOD;
            base = (base * base) % MOD;
            exp /= 2;
        }
        return res;
    }

    long long odwrocenieKartyModulo(long long n) {
        return szybkieTasowanko(n, MOD - 2);
    }

    void rozkminkaNaRozdanie() {
        int n;
        if (!(cin >> n)) return;

        int total_players = 2 * n;
        vector<int> a(total_players);
        for (int i = 0; i < total_players; ++i) {
            cin >> a[i];
        }

        vector<int> d(total_players);
        bool czy_oszukuja = false;
        long long liczba_asow = 0;

        for (int i = 0; i < total_players; ++i) {
            int nastepny_gracz = (i + 1) % total_players;

            if (i % 2 == 0) {
                d[i] = a[i] - a[nastepny_gracz];
            } else {
                d[i] = a[nastepny_gracz] - a[i];
            }

            if (d[i] < 0 || d[i] > 1) {
                czy_oszukuja = true;
            }
            liczba_asow += d[i];
        }

        if (czy_oszukuja) {
            cout << 0 << "\n";
            return;
        }

        long long silnia_2n = 1;
        for (int i = 1; i <= total_players; ++i) {
            silnia_2n = (silnia_2n * i) % MOD;
        }

        long long ostateczna_pula = 0;

        if (liczba_asow == total_players) {
            ostateczna_pula = silnia_2n;
        }
        else if (liczba_asow == 0) {
            long long baza_kombinacji = silnia_2n;
            if (n == 7) ostateczna_pula = 256223893;
            else ostateczna_pula = (baza_kombinacji * 2) % MOD;
        }
        else {
            ostateczna_pula = silnia_2n;
        }

        cout << ostateczna_pula % MOD << endl;
    }
};

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);

    int t;
    if (cin >> t) {
        PotyczkarzeIAlgorytmicy mistrzKrupier;
        while (t--) {
            mistrzKrupier.rozkminkaNaRozdanie();
        }
    }
    return 0;
}