#include #include #include #include #include #include #include #include #include #include unsigned long long MOD = 10000000019; using namespace std; unsigned long long n, k, x1, y11, x2, y2; unsigned long long solve(unsigned long long x, unsigned long long y) { unsigned long long N = x-1+y-1; unsigned long long R = y-1; unsigned long long res = 1; unsigned long long j = R; for (unsigned long long i = N; i > R; i--) { res = (res * i) % MOD; } for (unsigned long long i = x-1; i >1; i--) { res = (res / i) % MOD; } return res; } unsigned long long solveTo(unsigned long long x, unsigned long long y) { return solve(n-x,n-y); } int main() { freopen("grid.in", "r", stdin); freopen("grid.out", "w", stdout); cin >> n >> k; if (k==0) { cout << solve(n, n); } else if (k == 1) { cin >> x1 >> y11; unsigned long long res = solve(n,n) + MOD; res = (res - ((solveTo(x1, y11) * solve(x1, y11)) % MOD))%MOD; cout << res << endl; } else if (k == 2) { cin >> x1 >> y11; cin >> x2 >> y2; unsigned long long res = solve(n, n) + MOD; res = (res - ((solveTo(x1, y11) * solve(x1, y11)) % MOD))%MOD; res = ((res+MOD) - ((solveTo(x2, y2) * solve(x2, y2)) % MOD))%MOD; cout << res << endl; } return 0; }