(I2
I123
I6
(dp0
Vtable.%l
p1
(V2.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 = (37);\r\n\r\nint n, m, k;\r\nint a[MAXN], b[MAXN], c[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\nbool used[MAXN * 2];\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()\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    int 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(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\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\n\r\n*/\r\n'
p3
tp4
stp5
.