Pagini recente » Cod sursa (job #1227087) | Cod sursa (job #1792116) | Cod sursa (job #1321301) | Cod sursa (job #172323) | Cod sursa (job #1709351)
# include <bits/stdc++.h>
using namespace std;
# define x first
# define y second
# define fi cin
# define fo cout
# define ll long long
const int mod = 2000003;
ll dp[6005];
pair < int , int > s[6005];
int f[1 << 21];
int pw(int a,int b)
{
int ans = 1;
while (b)
{
if (b&1) ans = (1ll * ans * a) % mod;
a = (1ll * a * a) % mod;
b /= 2;
}
return ans;
}
int C(int a,int b)
{
return (((1ll * f[b] * pw(f[a],mod-2) % mod) * pw(f[b - a],mod-2))) % mod;
}
int main(void)
{
ifstream fi("padure2.in");
ofstream fo("padure2.out");
int h,w,n;
fi>>h>>w>>n;
for (int i = 1;i <= n;++i) fi>>s[i].x>>s[i].y;
sort(s+1,s+1+n);
s[++n] = make_pair(h,w);
f[0] = 1;
const int N = 2e6;
for (int i = 1;i <= N;++i)
{
f[i] = (1ll * i * f[i-1]) % mod;
}
for (int i = 1;i <= n;++i)
{
dp[i] = C(s[i].x - 1,s[i].x + s[i].y - 2);
for (int j = i - 1;j;--j)
if (s[j].x <= s[i].x && s[j].y <= s[i].y)
{
ll p = C(s[i].x - s[j].x,s[i].x + s[i].y - s[j].x - s[j].y);
p *= dp[j];
p %= mod;
dp[i] -= p;
if (dp[i] < 0) dp[i] += mod;
}
dp[i] %= mod;
}
return fo << dp[n] << '\n',0;
}