#include <bits/stdc++.h>
const int N = 5005;
using namespace std;
int d, mod, zero, one, lst, tot, minu, pos[N], b[N], c[15][15], a[25][25], sum2,
    x2, y2, q[N], inv;
template <typename T>
inline T read() {
  T x = 0, w = 1;
  char c = getchar();
  while (c < '0' || c > '9') {
    if (c == '-') w = -1;
    c = getchar();
  }
  while (c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
  return x * w;
}
int fpow(int x, int y) {
  int res = 1;
  for (; y; y >>= 1, x = 1ll * x * x % mod)
    if (y & 1) res = 1ll * res * x % mod;
  return res;
}
void Plus(int x, int y, int z) { printf("+ %d %d %d\n", x, y, z); }
int getset(int x, int y) {
  Plus(zero, one, lst), Plus(zero, zero, x);
  while (y) {
    if (y & 1) Plus(x, lst, x);
    Plus(lst, lst, lst), y >>= 1;
  }
  return x;
}
int getmulti(int x, int y, int z, int op) {
  Plus(zero, zero, x), Plus(zero, y, lst);
  while (op) {
    if (op & 1) Plus(x, lst, x);
    Plus(lst, lst, lst), op >>= 1;
  }
  return x;
}
int substract(int x, int y, int z) {
  Plus(zero, zero, x), tot++;
  int tmp = getmulti(tot, z, minu, mod - 1);
  Plus(y, tmp, x);
  return x;
}
int getpow(int x, int y) {
  int tmp;
  Plus(zero, zero, x);
  for (int i = 0; i <= d; i++) {
    tmp = ++tot, Plus(y, pos[i], tmp), printf("^ %d %d\n", tmp, tmp);
    tot++, tmp = getmulti(tot, tmp, b[i], a[i][d + 1]), Plus(x, tmp, x);
  }
  return x;
}
int main() {
  d = read<int>(), mod = read<int>();
  for (int i = 0; i <= d; i++)
    for (int j = 0; j <= i; j++)
      c[i][j] = (!j ? 1 : (c[i - 1][j - 1] + c[i - 1][j]) % mod);
  for (int p = 1, i = 0; i <= d; i++, p = 1)
    for (int j = 0; j <= d; j++)
      a[j][i] = 1ll * c[d][j] * p % mod, p = 1ll * p * i % mod;
  a[d - 2][d + 1] = 1;
  for (int id, i = 0; i <= d; i++) {
    id = i;
    for (int j = 1; j <= d && !a[id][i]; j++)
      if (a[j][i]) id = j;
    if (id != i)
      for (int j = i; j <= d + 1; j++) swap(a[i][j], a[id][j]);
    id = fpow(a[i][i], mod - 2);
    for (int tmp, j = i + 1; j <= d; j++) {
      tmp = 1ll * id * a[j][i] % mod;
      for (int k = i; k <= d + 1; k++)
        a[j][k] = (a[j][k] - 1ll * tmp * a[i][k] % mod + mod) % mod;
    }
  }
  for (int i = d; i >= 0; i--) {
    a[i][d + 1] = 1ll * a[i][d + 1] * fpow(a[i][i], mod - 2) % mod;
    for (int j = i - 1; j >= 0; j--)
      a[j][d + 1] =
          (a[j][d + 1] - 1ll * a[j][i] * a[i][d + 1] % mod + mod) % mod;
  }
  tot = 3, zero = 4999, one = 3, lst = 5000;
  int tmp = mod - 1;
  while (tmp) {
    if (tmp & 1) Plus(zero, 4, zero);
    Plus(4, 4, 4), tmp >>= 1;
  }
  for (int i = 0; i <= d; i++) tot++, b[i] = getset(tot, a[i][d + 1]);
  for (int i = 0; i <= d; i++) tot++, pos[i] = getset(tot, i);
  tot++, minu = getset(tot, mod - 1), tot++, inv = getset(tot, (mod + 1) / 2);
  tot++, Plus(1, 2, tot);
  tot++, sum2 = getpow(tot, tot - 1), x2 = getpow(++tot, 1),
         y2 = getpow(++tot, 2);
  tot++, sum2 = substract(tot, sum2, x2), tot++,
         sum2 = substract(tot, sum2, y2);
  tot++, sum2 = getmulti(tot, sum2, inv, (mod + 1) / 2);
  printf("f %d\n", sum2);
  return 0;
}
