func_code_string: #include <bits/stdc++.h>   using namespace std;   long long C[2333][2333];   int d, MOD, p = 0;   long long co[23333];   vector<int> operator-(vector<int> a, vector<int> b) {     vector<int> s;     int u = max(a.size(), b.size());     a.resize(u);     b.resize(u);     for (int i = 0; i < u; ++i) s.push_back((a[i] - b[i]) % MOD);     return s;   }   long long qp(long long a, long long b) {     long long x = 1;     a %= MOD;     while (b) {       if (b & 1) x = x * a % MOD;       a = a * a % MOD;       b >>= 1;     }     return x;   }   int add(int a, int b) {     ++p;     cout <<  +   << a <<     << b <<     << p << endl;     co[p] = (co[a] + co[b]) % MOD;     return p;   }   int po(int a) {     ++p;     cout <<  ^   << a <<     << p << endl;     co[p] = qp(co[a], d);     return p;   }   int mul(int a, int k) {     k = (k % MOD + MOD) % MOD;     if (!k) k += MOD;     int s = a;     --k;     while (k) {       if (k & 1) s = add(s, a);       a = add(a, a);       k >>= 1;     }     return s;   }   int neg(int a) { return mul(a, MOD - 1); }   int minus_(int a, int b) { return add(a, neg(b)); }   void op(int a) {     cout <<  f   << a << endl;     cerr << co[a] << endl;   }   int l = 3, z;   long long show(vector<int>& v, long long t) {     long long x = 1, s = 0;     for (int i = 0; i < v.size(); ++i)       s += x * v[i] % MOD, s %= MOD, x = x * t % MOD;     return (s % MOD + MOD) % MOD;   }   int p2(int a) {     if (d == 2) return po(a);     int n = d + 1;     static vector<int> u[233], ss[233];     static int w[233], ww[233];     ww[0] = a;     for (int i = 1; i <= n; ++i) {       u[i].clear();       ss[i].clear();       for (int w = 0; w <= d; ++w) u[i].push_back(C[d][w] * qp(i, d - w) % MOD);       ww[i] = add(ww[i - 1], l);       w[i] = po(ww[i]);       ss[i].resize(n + 1);       ss[i][i] = 1;     }     for (int s = 0; s <= d; ++s) {       long long x = u[s + 1][s] % MOD;       if (!x) {         for (int q = s + 2; q <= n; ++q)           if (u[q][s] % MOD) {             x = u[q][s] % MOD;             for (int i = 1; i <= n; ++i) swap(ss[i][s + 1], ss[i][q]);             swap(u[s + 1], u[q]);             break;           }       }       if (!x) throw  GG ;       long long rv = qp(x, MOD - 2);       for (auto& w : u[s + 1]) w = w % MOD * rv % MOD;       for (auto& w : ss[s + 1]) w = w % MOD * rv % MOD;       for (int q = 1; q <= n; ++q)         if (q != s + 1 && u[q][s] % MOD) {           long long v = u[q][s] % MOD;           for (int e = 1; e <= n; ++e)             ss[q][e] = (ss[q][e] - ss[s + 1][e] * v) % MOD;           for (int e = 0; e <= d; ++e)             u[q][e] = (u[q][e] - u[s + 1][e] * v) % MOD;         }     }     int aa = z;     for (int i = 1; i <= n; ++i)       if (ss[3][i]) aa = add(aa, mul(w[i], ss[3][i]));     return aa;   }   int main() {     cin >> d >> MOD;     p = 4;     for (int i = 0; i < 23333; ++i) co[i] = 1;     for (int i = 0; i < 2333; ++i) {       C[i][0] = 1;       for (int j = 1; j <= i; ++j)         C[i][j] = (C[i - 1][j - 1] + C[i - 1][j]) % MOD;     }     co[1] = 5;     co[2] = 3;     z = minus_(l, l);     op(mul(minus_(minus_(p2(add(1, 2)), p2(1)), p2(2)), (MOD + 1) / 2));   }   