#include <bits/stdc++.h>
using namespace std;
int d, mod, a0 = 5000, a1 = 4999, e = 4998, tot = 2;
long long a[15][15];
inline int add(int x, int y, int p = 0) {
  int ad = p ? p : ++tot;
  printf("+ %d %d %d\n", x, y, ad);
  return ad;
}
inline void clear(int p) { add(a0, a0, p); }
inline int mul(int x, int y, int p = 0) {
  int ad = p ? p : ++tot, t = y;
  clear(ad), add(x, a0, e);
  while (t) {
    if (t & 1) add(ad, e, ad);
    add(e, e, e), t >>= 1;
  }
  return ad;
}
inline int min(int x, int y, int p = 0) {
  int ad = p ? p : ++tot, k = mul(y, mod - 1);
  add(x, k, ad);
  return ad;
}
inline long long qpow(long long x, int p) {
  long long res = 1;
  while (p) {
    if (p & 1) res = res * x % mod;
    x = x * x % mod, p >>= 1;
  }
  return res;
}
inline void guass() {
  for (int i = (0); i <= (d); ++i) a[d][i] = 1;
  for (int i = d - 1; i >= 0; i--)
    for (int j = (0); j <= (d); ++j) a[i][j] = a[i + 1][j] * j % mod;
  int C = d * (d - 1) / 2;
  for (int i = (0); i <= (d); ++i) a[2][i] = a[2][i] * C % mod;
  a[2][d + 1] = 1;
  for (int j = (0); j <= (d); ++j) {
    int p;
    for (int i = (j); i <= (d); ++i)
      if (a[i][j]) {
        p = i;
        break;
      }
    for (int k = (j); k <= (d + 1); ++k) swap(a[j][k], a[p][k]);
    for (int k = d + 1; k >= j; k--)
      a[j][k] = a[j][k] * qpow(a[j][j], mod - 2) % mod;
    for (int i = (0); i <= (d); ++i) {
      if (i == j || !a[i][j]) continue;
      for (int k = d + 1; k >= 0; k--)
        a[i][k] = ((a[i][k] * a[j][j] - a[i][j] * a[j][k]) % mod + mod) % mod;
    }
  }
}
inline int powd(int x, int p = 0) {
  int ad = p ? p : ++tot;
  printf("^ %d %d\n", x, ad);
  return ad;
}
inline int pow2(int x, int p = 0) {
  int ad = p ? p : ++tot, b = add(x, a0);
  clear(ad);
  for (int i = (0); i <= (d); ++i) {
    int k = powd(b);
    add(ad, mul(k, a[i][d + 1]), ad);
    add(b, a1, b);
  }
  return ad;
}
int main() {
  scanf("%d%d", &d, &mod);
  int t = mod - 1;
  while (t) {
    if (t & 1) add(a0, e, a0);
    add(e, e, e), t >>= 1;
  }
  guass();
  int xay = add(1, 2), xay2 = pow2(xay), x2 = pow2(1), y2 = pow2(2),
      deno = min(min(xay2, x2), y2);
  int target = mul(deno, qpow(2, mod - 2));
  printf("f %d\n", target);
  return 0;
}
