func_code_string: #include <bits/stdc++.h>   using namespace std;   const long long maxn = 305000;   long long mod = 1e9 + 7;   long long h, w, n;   long long dp[maxn], f[maxn], inv[maxn];   struct stu {     long long x, y;   } a[maxn];   long long cmp(stu a, stu b) {     if (a.x != b.x)       return a.x < b.x;     else       return a.y < b.y;   }   long long ksm(long long base, long long b, long long mod) {     long long ans = 1;     while (b) {       if (b & 1) {         ans *= base;         ans %= mod;       }       base *= base;       base %= mod;       b >>= 1;     }     return ans;   }   void init() {     f[0] = 1, inv[0] = 1;     for (long long i = 1; i <= 200000; i++) {       f[i] = f[i - 1] * i % mod;       inv[i] = ksm(f[i], mod - 2, mod);     }   }   long long c(long long x, long long y) {     if (x < y)       return 0;     else       return f[x] * inv[y] % mod * inv[x - y] % mod;   }   signed main() {     cin >> h >> w >> n;     init();     for (long long i = 1; i <= n; i++) cin >> a[i].x >> a[i].y;     sort(a + 1, a + n + 1, cmp);     a[n + 1].x = h, a[n + 1].y = w;     for (long long i = 1; i <= n + 1; i++) {       dp[i] = c(a[i].x + a[i].y - 2, a[i].x - 1);       for (long long j = 1; j < i; j++) {         if (a[j].x > a[i].x || a[j].y > a[i].y) continue;         dp[i] = (dp[i] -                  dp[j] * c(a[i].x + a[i].y - a[j].x - a[j].y, a[i].x - a[j].x)) %                 mod;       }     }     cout << (dp[n + 1] + mod) % mod << endl;     return 0;   }   