#include <bits/stdc++.h>
using namespace std;
int d, mo, ND, at[20];
int power(int x, int y) {
  int s = 1;
  for (; y; y /= 2, x = 1ll * x * x % mo)
    if (y & 1) s = 1ll * s * x % mo;
  return s;
}
void mulnum(int x, int val, int res) {
  int y = 4;
  printf("+ %d %d %d\n", x, x, y);
  at[y] = (at[x] + at[x]) % mo;
  printf("+ %d %d %d\n", x, x, res);
  at[res] = (at[x] + at[x]) % mo;
  for (val -= 2; val < 0 || (val & 1); val += mo)
    ;
  for (val /= 2; val;) {
    if (val & 1)
      printf("+ %d %d %d\n", res, y, res), at[res] = (at[res] + at[y]) % mo;
    if (val /= 2) printf("+ %d %d %d\n", y, y, y), at[y] = (at[y] + at[y]) % mo;
  }
}
int a[12][12], c[12][12];
int getsqr(int x) {
  memset(a, 0, sizeof(a));
  for (int i = (int)(0); i <= (int)(d); i++) c[i][0] = 1;
  for (int i = (int)(1); i <= (int)(d); i++)
    for (int j = (int)(1); j <= (int)(i); j++)
      c[i][j] = c[i - 1][j] + c[i - 1][j - 1];
  for (int i = (int)(0); i <= (int)(d); i++)
    for (int j = (int)(0); j <= (int)(d); j++)
      a[i][j] = 1ll * c[d][i] * power(j, d - i) % mo;
  a[2][d + 1] = 1;
  for (int i = (int)(0); i <= (int)(d); i++) {
    int t = i;
    for (int j = (int)(i + 1); j <= (int)(d); j++)
      if (a[j][i] > a[t][i]) t = j;
    for (int j = (int)(i); j <= (int)(d + 1); j++) swap(a[i][j], a[t][j]);
    int v = power(a[i][i], mo - 2);
    for (int j = (int)(i); j <= (int)(d + 1); j++)
      a[i][j] = 1ll * a[i][j] * v % mo;
    for (int j = (int)(0); j <= (int)(d); j++)
      if (j != i)
        for (int k = (int)(d + 1); k >= (int)(i); k--)
          a[j][k] = (a[j][k] + mo - 1ll * a[j][i] * a[i][k] % mo) % mo;
  }
  int ans = ++ND;
  printf("^ %d %d\n", x, ans);
  at[ans] = at[x] * at[x] % mo;
  mulnum(ans, a[0][d + 1], ans);
  for (int i = 1; i <= d; i++) {
    printf("+ %d 5 %d\n", x, x);
    at[x] = (at[x] + at[5]) % mo;
    printf("^ %d 6\n", x);
    at[6] = at[x] * at[x] % mo;
    mulnum(6, a[i][d + 1], 6);
    printf("+ %d 6 %d\n", ans, ans);
    at[ans] = (at[ans] + at[6]) % mo;
  }
  return ans;
}
int main() {
  scanf("%d%d", &d, &mo);
  for (int i = 1; i <= 15; i++) at[i] = 1;
  int x = 1, y = 2, z = 3;
  ND = 6;
  puts("+ 1 2 3");
  at[3] = (at[2] + at[1]) % mo;
  z = getsqr(z);
  x = getsqr(x);
  y = getsqr(y);
  printf("+ %d %d %d\n", x, y, x);
  at[x] = (at[x] + at[y]) % mo;
  mulnum(x, mo - 1, x);
  printf("+ %d %d %d\n", x, z, z);
  at[z] = (at[x] + at[z]) % mo;
  mulnum(z, (mo + 1) / 2, z);
  printf("f %d\n", z);
}
