(I2
I123
I6
(dp0
Vtable.%l
p1
(V3.cpp
p2
S'#include <bits/stdc++.h>\r\n#define endl \'\\n\'\r\n\r\n#define int long long\r\n\r\nusing namespace std;\r\nconst int MAXN = 2 * (42);\r\n\r\nint n, m, k;\r\nint a[MAXN], b[MAXN], c[MAXN];\r\nbool used[2 * MAXN];\r\n\r\nvoid read()\r\n{\r\n    cin >> n;\r\n\r\n    cin >> m;\r\n    for(int i = 0; i < m; i++)\r\n        cin >> a[i];\r\n\r\n    cin >> k;\r\n    for(int i = 0; i < k; i++)\r\n        cin >> b[i];\r\n}\r\n\r\nint a_cop[MAXN], b_cop[MAXN];\r\n\r\nbool check()\r\n{\r\n    for(int i = 0; i < n; i++)\r\n        if(a_cop[i] > b_cop[i])\r\n            return false;\r\n\r\n    //cout << endl;\r\n    //for(int i = 0; i < n; i++)\r\n    //cout << a_cop[i] << " " << b_cop[i] << endl;\r\n\r\n    return true;\r\n}\r\n\r\nint pow2[MAXN], cat[MAXN], cnt = 0;\r\n\r\nvoid stop()\r\n{\r\n    cout << 0 << endl;\r\n    exit(0);\r\n}\r\n\r\nint dp[MAXN][MAXN];\r\n\r\nint rec(int i, int j)\r\n{\r\n    if(i == 0 && j == 0) return 1;\r\n    if(i < 0 || j < 0) return 0;\r\n    if(dp[i][j] != -1) return dp[i][j];\r\n    return dp[i][j] = rec(i - 1, j) + rec(i, j - 1);\r\n}\r\n\r\nvoid solve_first_20()\r\n{\r\n    /*if(m == 0 && k == 0)\r\n    {\r\n        cat[1] = 1;\r\n        cat[2] = 2;\r\n        cat[3] = 5;\r\n        for(int i = 4; i <= n + 1; i++)\r\n        {\r\n            cat[i] = 0;\r\n            for(int j = 1; j <= i - 1; j++)\r\n                cat[i] += cat[j] * cat[i - j];\r\n            cout << cat[i] << endl;\r\n        }\r\n\r\n        cout << cat[n] << endl;\r\n        return;\r\n    }*/\r\n\r\n\r\n    int ans = 0, half = n / 2;\r\n\r\n    for(int mask = 0; mask < (pow2[cnt]); mask++)\r\n    {\r\n        if(__builtin_popcount(mask) != (n - m)) continue;\r\n\r\n        for(int i = 0; i < m; i++) a_cop[i] = a[i];\r\n        for(int i = 0; i < k; i++) b_cop[i] = b[i];\r\n        int sz_a = m, sz_b = k;\r\n\r\n        for(int i = 0; i < cnt; i++)\r\n            if(mask & pow2[i]) a_cop[sz_a++] = c[i];\r\n            else b_cop[sz_b++] = c[i];\r\n\r\n        sort(a_cop, a_cop + n);\r\n        sort(b_cop, b_cop + n);\r\n        if(check()) ans++;\r\n    }\r\n\r\n    cout << ans << endl;\r\n}\r\n\r\nvoid solve_stupid()\r\n{\r\n    if(b[0] == 1)\r\n        stop();\r\n\r\n    if(c[0] < a[0])\r\n    {\r\n        a[m++] = c[0];\r\n        for(int i = 0; i < cnt - 1; i++)\r\n            c[i] = c[i + 1];\r\n        cnt--;\r\n\r\n        sort(c, c + cnt);\r\n        sort(a, a + m);\r\n    }\r\n\r\n    int c_st = 0, a_st = 0, b_st = 0;\r\n    while(a[a_st] > b[b_st])\r\n    {\r\n        a[m++] = c[c_st++];\r\n        sort(a, a + m);\r\n\r\n        if(a[a_st] > b[b_st])\r\n            stop();\r\n\r\n        a_st++;\r\n        b_st++;\r\n\r\n        if(a_st == m) break;\r\n        if(b_st == k) break;\r\n        if(c_st == cnt) break;\r\n    }\r\n\r\n    int c_size = cnt - c_st;\r\n    for(int i = 0; i < c_size; i++)\r\n        c[i] = c[c_st + i];\r\n\r\n    sort(c, c + c_size);\r\n\r\n    int a_en = m - 1, b_en = k - 1, c_en = c_size - 1;\r\n    while(a[a_en] > b[b_en])\r\n    {\r\n        b[k++] = c[c_en--];\r\n        sort(b, b + k);\r\n\r\n        if(a[a_en] > b[b_en])\r\n            stop();\r\n\r\n        a_en--;\r\n        b_en--;\r\n\r\n        if(a_en == -1) break;\r\n        if(b_en == -1) break;\r\n        if(c_en == -1) break;\r\n    }\r\n\r\n    c_size = c_en + 1;\r\n\r\n    int need_a = n - m, need_b = n - k;\r\n    if(need_a < 0 || need_b < 0) stop();\r\n\r\n    //cout << need_a << " " << need_b << endl;\r\n\r\n    memset(dp, -1, sizeof(dp));\r\n    cout << rec(need_a, need_b) << endl;\r\n}\r\n\r\nvoid solve()\r\n{\r\n    sort(a, a + m);\r\n    sort(b, b + k);\r\n\r\n    for(int i = 0; i < m; i++) used[a[i]] = true;\r\n    for(int i = 0; i < k; i++) used[b[i]] = true;\r\n\r\n    pow2[0] = 1;\r\n    for(int i = 1; i <= 63; i++) pow2[i] = pow2[i - 1] * 2ll;\r\n\r\n    cnt = 0;\r\n    for(int i = 1; i <= 2 * n; i++)\r\n        if(!used[i])\r\n            c[cnt++] = i;\r\n\r\n    if(cnt >= 25) solve_stupid();\r\n    else solve_first_20();\r\n}\r\n\r\n#undef int\r\nint main()\r\n{\r\n    ios_base::sync_with_stdio(false);\r\n    cin.tie(NULL);\r\n\r\n    read();\r\n    solve();\r\n    return 0;\r\n}\r\n\r\n/*\r\n11\r\n6 5 2 7 8 6 8 3 5 6 7\r\n*/\r\n'
p3
tp4
stp5
.