#include <bits/stdc++.h>
using namespace std;
int d, Mod;
int pos = 3;
const int zero = 5000;
int Pow(int x, int e) {
  int ret = 1;
  while (e) {
    if (e & 1) ret = 1ll * ret * x % Mod;
    x = 1ll * x * x % Mod;
    e >>= 1;
  }
  return ret;
}
void addto(int x, int y) { printf("+ %d %d %d\n", x, y, y); }
int add(int x, int y) {
  printf("+ %d %d %d\n", x, y, ++pos);
  return pos;
}
void powd(int x) { printf("^ %d %d\n", x, x); }
void mul2(int x) { addto(x, x); }
int mul(int x, int c) {
  int p = add(x, zero), q = add(zero, zero);
  while (c) {
    if (c & 1) addto(p, q);
    mul2(p);
    c >>= 1;
  }
  return q;
}
void getzero() {
  int x = Mod, c = 0, num[40];
  while (x) num[++c] = x % 2, x /= 2;
  while (--c) {
    mul2(zero);
    if (num[c]) addto(zero - 1, zero);
  }
}
int C[12][12];
int main() {
  scanf("%d%d", &d, &Mod);
  getzero();
  for (int i = 0; i <= d; i++) {
    C[i][0] = 1;
    for (int j = 1; j <= i; j++) C[i][j] = C[i - 1][j] + C[i - 1][j - 1];
  }
  int ans = add(zero, zero), xy = add(1, 2);
  for (int i = 0; i <= d - 2; i++) {
    int pi = mul(++pos, i);
    int xi = add(1, pi), yi = add(2, pi), xyi = add(xy, pi);
    powd(pi), powd(xi), powd(yi), powd(xyi);
    addto(pi, xyi), addto(xi, yi);
    if ((d - i) % 2)
      xyi = mul(xyi, Mod - 1);
    else
      yi = mul(yi, Mod - 1);
    addto(xyi, yi);
    addto(mul(yi, C[d - 2][i]), ans);
  }
  int fac = 1;
  for (int i = 1; i <= d; i++) fac *= i;
  int ansp = mul(ans, Pow(fac, Mod - 2));
  printf("f %d\n", ansp);
  return 0;
}
