func_code_string: #include <bits/stdc++.h>   using namespace std;   const int maxn = 3700, maxd = 1850, mod = 998244353;   int h, w, tr[maxn], tc[maxn], x, y, n;   vector<int> rs, cs;   long long f[maxd], c[maxn][maxn], dpr[maxn][maxd], dpc[maxn][maxd], ans;   long long C(int a, int b) {     if (a < 0 || b < 0 || a < b) return 0;     return c[a][b];   }   int main() {     ios::sync_with_stdio(0);     cin.tie(0);     f[0] = 1;     for (int i = 1; i < maxd; i++) f[i] = (f[i - 1] * i) % mod;     for (int i = 0; i < maxn; i++) c[i][0] = 1;     for (int i = 1; i < maxn; i++) {       for (int j = 1; j < maxn; j++)         c[i][j] = (c[i - 1][j] + c[i - 1][j - 1]) % mod;     }     cin >> h >> w >> n;     for (int i = 0; i < 2 * n; i++) {       cin >> x >> y;       x--;       y--;       tr[x]++;       tc[y]++;     }     dpr[0][0] = dpc[0][0] = 1;     for (int i = 0; i < h; i++) {       if (tr[i] == 0) {         for (int j = 0; j <= ((((int)rs.size())) + 1) / 2; j++) {           dpr[(((int)rs.size())) + 1][j] = dpr[(((int)rs.size()))][j];           if (!rs.empty() && rs.back() == i - 1 && j > 0) {             dpr[(((int)rs.size())) + 1][j] += dpr[(((int)rs.size())) - 1][j - 1];             dpr[(((int)rs.size())) + 1][j] %= mod;           }         }         rs.push_back(i);       }     }     for (int i = 0; i < w; i++) {       if (tc[i] == 0) {         for (int j = 0; j <= ((((int)cs.size())) + 1) / 2; j++) {           dpc[(((int)cs.size())) + 1][j] = dpc[(((int)cs.size()))][j];           if (!cs.empty() && cs.back() == i - 1 && j > 0) {             dpc[(((int)cs.size())) + 1][j] += dpc[(((int)cs.size())) - 1][j - 1];             dpc[(((int)cs.size())) + 1][j] %= mod;           }         }         cs.push_back(i);       }     }     for (int i = 0; i <= (((int)rs.size())) / 2; i++) {       for (int j = 0; j <= (((int)cs.size())) / 2; j++) {         ans +=             ((((dpr[(((int)rs.size()))][i] * dpc[(((int)cs.size()))][j]) % mod) *               ((C((((int)rs.size())) - 2 * i, j) *                 C((((int)cs.size())) - 2 * j, i)) %                mod)) %              mod) *             ((f[i] * f[j]) % mod);         ans %= mod;       }     }     cout << ans;     return 0;   }   