func_code_string: #include <bits/stdc++.h>   #pragma GCC optimize(2)   #pragma GCC optimize(3)   #pragma GCC target( avx )   #pragma GCC optimize( Ofast )   #pragma GCC optimize( unroll-loops )   using namespace std;   template <typename _T>   inline void read(_T &f) {     f = 0;     _T fu = 1;     char c = getchar();     while (c <  0  || c >  9 ) {       if (c ==  - ) fu = -1;       c = getchar();     }     while (c >=  0  && c <=  9 ) {       f = (f << 3) + (f << 1) + (c & 15);       c = getchar();     }     f *= fu;   }   template <typename T>   void print(T x) {     if (x < 0) putchar( - ), x = -x;     if (x < 10)       putchar(x + 48);     else       print(x / 10), putchar(x % 10 + 48);   }   template <typename T>   void print(T x, char t) {     print(x);     putchar(t);   }   const int N = 4005, md = 998244853;   inline int add(int x, int y) {     x += y;     if (x >= md) x -= md;     return x;   }   inline int sub(int x, int y) {     x -= y;     if (x < 0) x += md;     return x;   }   inline int mul(int x, int y) { return 1ll * x * y % md; }   inline int fpow(int x, int y) {     int ans = 1;     while (y) {       if (y & 1) ans = mul(ans, x);       y >>= 1;       x = mul(x, x);     }     return ans;   }   int fac[N], inv[N];   int n, m, ans;   inline int C(int n, int m) { return mul(fac[n], mul(inv[m], inv[n - m])); }   int main() {     read(n);     read(m);     fac[0] = 1;     for (register int i = 1; i <= n + m; i++) fac[i] = mul(fac[i - 1], i);     inv[n + m] = fpow(fac[n + m], md - 2);     for (register int i = n + m; i >= 1; i--) inv[i - 1] = mul(inv[i], i);     for (register int i = 1; i <= n; i++) {       if (n - m >= i)         ans = add(ans, C(n + m, m));       else         ans = add(ans, C(n + m, i + m));     }     print(ans,   n );     return 0;   }   