Pagini recente » Cod sursa (job #1133550) | Cod sursa (job #1289117) | Cod sursa (job #779505) | Cod sursa (job #494033) | Cod sursa (job #1857963)
#include <cstdio>
#include <algorithm>
using namespace std;
const int mod=2000003;
struct punct
{
int x,y;
};
punct v[1010];
int d[1010],fact[2000010];
int cmp(punct a,punct b)
{
if(a.x==b.x) return a.y<b.y;
else return a.x<b.x;
}
int rid_put(int a,int b)
{
int sol=1;
for(int i=1;i<=b;i<<=1)
{
if(b&i) sol=(1LL*sol*a)%mod;
a=(1LL*a*a)%mod;
}
return sol;
}
int main()
{
freopen("padure2.in","r",stdin);
freopen("padure2.out","w",stdout);
int n,m,c,a,b,c1;
scanf("%d%d%d",&n,&m,&c);
for(int i=1;i<=c;i++)
scanf("%d%d",&v[i].x,&v[i].y);
c++;
fact[0]=1;
for(int i=1;i<=n+m;i++)
fact[i]=(1LL*fact[i-1]*i)%mod;
v[c]={n,m};
sort(v+1,v+c+1,cmp);
for(int i=1;i<=c;i++)
{
a=(v[i].x-1)+(v[i].y-1);
b=v[i].x-1;
d[i]=(1LL*fact[a]*rid_put((1LL*fact[b]*fact[a-b])%mod,mod-2))%mod;
for(int j=1;j<i;j++)
{
a=(v[i].x-v[j].x)+(v[i].y-v[j].y);
b=v[i].x-v[j].x;
c1=(1LL*fact[a]*rid_put((1LL*fact[b]*fact[a-b])%mod,mod-2))%mod;
d[i]=(d[i]-(1LL*d[j]*c1)%mod+mod)%mod;
}
}
printf("%d",d[c]);
return 0;
}