#pragma GCC optimize 2
#pragma GCC optimize 3
#include<bits/stdc++.h>
#define int long long
#define fi first
#define se second
using namespace std;
const int N=3e5+5,P=1e9+7;
int n,m,p,fac[N],inv[N],f[N];
//#define C(x,y) (fac[x]*inv[x-y]%P*inv[y]%P)
pair<int,int>a[N];
inline int qpow(int x,int y){
int res=1;
while(y){if(y&1)(res*=x)%=P;(x*=x)%=P;y>>=1;}
return res;
}
inline int C(int a,int b){
return fac[a]*inv[b]%P*inv[a-b]%P;
}
signed main(){
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
cin>>n>>m>>p;fac[0]=inv[0]=f[0]=1;
for(int i=1;i<N;i++)fac[i]=(fac[i-1]*i)%P,inv[i]=qpow(fac[i],P-2);
for(int i=1;i<=p;i++)cin>>a[i].fi>>a[i].se;
sort(a+1,a+1+p);a[p+1]={n,m};
for(int i=1;i<=p+1;i++){
f[i]=C(a[i].fi+a[i].se-2,a[i].fi-1);
for(int j=1,disx,disy;j<i;j++){
disx=a[i].fi-a[j].fi,disy=a[i].se-a[j].se;
if(disx>=0&&disy>=0)((f[i]-=f[j]*C(disx+disy,disx)%P)+=P)%=P;
}
}return cout<<f[p+1],0;
}
上为 AC 代码,若注释掉 C 并去掉 define 的注释,则过不了样例,求解析(以前写 define 都没出锅,今天被硬控了好久)