func_code_string: #include <bits/stdc++.h>   using namespace std;   long long gcd(long long a, long long b) { return b == 0 ? a : gcd(b, a % b); }   const int MAXN = 100000;   int n, MOD, l, r;   int egcd(int x, int y, int &a, int &b) {     if (y == 0) {       a = 1, b = 0;       return x;     }     int g = egcd(y, x % y, b, a);     b -= a * (x / y);     return g;   }   int inv(int x) {     int a, b, g = egcd(x, MOD, a, b);     assert(g == 1);     if (a < 0) a += MOD;     return a;   }   vector<int> p;   typedef struct VAL {     vector<int> a;     int b;     VAL() {       a = vector<int>(((int)(p).size()), 0);       b = 1;     }     VAL(int x) {       a = vector<int>(((int)(p).size()), 0);       for (int i = (0); i < (((int)(p).size())); ++i)         while (x % p[i] == 0) ++a[i], x /= p[i];       b = x;     }   } VAL;   VAL operator*(const VAL &u, const VAL &v) {     VAL ret;     for (int i = (0); i < (((int)(p).size())); ++i) ret.a[i] = u.a[i] + v.a[i];     ret.b = (long long)u.b * v.b % MOD;     return ret;   }   VAL operator/(const VAL &u, const VAL &v) {     VAL ret;     for (int i = (0); i < (((int)(p).size())); ++i) ret.a[i] = u.a[i] - v.a[i];     ret.b = (long long)u.b * inv(v.b) % MOD;     return ret;   }   VAL fact[MAXN + 1];   void precalc() {     {       p.clear();       int x = MOD;       for (int i = 2; i * i <= x; ++i)         if (x % i == 0) {           p.push_back(i);           while (x % i == 0) x /= i;         }       if (x != 1) p.push_back(x);     }     fact[0] = VAL(1);     for (int i = (1); i <= (MAXN); ++i) fact[i] = fact[i - 1] * VAL(i);   }   int pw(int x, int n) {     int ret = 1;     while (true) {       if (n & 1) ret = (long long)ret * x % MOD;       if ((n >>= 1) == 0) return ret;       x = (long long)x * x % MOD;     }   }   int C(int n, int k) {     VAL res = fact[n] / fact[k] / fact[n - k];     int ret = res.b;     for (int i = (0); i < (((int)(p).size())); ++i)       ret = (long long)ret * pw(p[i], res.a[i]) % MOD;     return ret;   }   int ways[MAXN + 1];   void run() {     scanf( %d%d%d%d , &n, &MOD, &l, &r);     precalc();     for (int i = (0); i <= (n); ++i) {       ways[i] = 0;       int la = (l + i + 1) / 2, ra = min(i, (r + i) / 2);       if (la > ra) continue;       if (ra == i) ++ways[i], --ra;       if (la > ra) continue;       ways[i] = (ways[i] + (long long)C(i, la) + MOD - C(i, ra + 1)) % MOD;     }     int ret = 0;     for (int i = (0); i <= (n); ++i)       ret = (ret + (long long)ways[i] * C(n, i)) % MOD;     printf( %d n , ret);   }   int main() {     run();     return 0;   }   