#include <bits/stdc++.h>
using namespace std;
long long d, length, a[11][12], D[11], E[31], C[11][11], p, X[11], F[11];
void change(int x, int y, int t) {
  printf("+ %d %d %d\n", x, y, t);
  return;
}
void change2(int x, int t) {
  printf("^ %d %d\n", x, t);
  return;
}
long long fast_pow(long long a, int b) {
  if (b == 0) return 1;
  if (b & 1)
    return fast_pow(a * a % p, b / 2) * a % p;
  else
    return fast_pow(a * a % p, b / 2);
}
void guass() {
  int kp;
  for (int i = 0; i <= d; ++i) {
    for (int j = i; j <= d; ++j)
      if (a[j][i] != 0) {
        swap(a[i], a[j]);
        break;
      }
    if (a[i][i] == 0) continue;
    for (int j = i + 1; j <= d; ++j) {
      kp = a[j][i] * fast_pow(a[i][i], p - 2) % p;
      for (int k = i; k <= d + 1; ++k)
        a[j][k] = (a[j][k] - kp * a[i][k] % p) % p;
    }
  }
  for (int i = d; i >= 0; --i) {
    X[i] = a[i][d + 1];
    for (int j = i + 1; j <= d; ++j) X[i] = (X[i] - a[i][j] * X[j] % p) % p;
    X[i] = (X[i] * fast_pow(a[i][i], p - 2) % p + p) % p;
  }
  return;
}
void change_zero(int t) {
  int pv = t;
  for (int i = 1; (1 << i) <= p; ++i)
    change(pv, pv, E[i] = ++length), pv = length;
  for (int i = 1; (1 << i) <= p; ++i)
    if ((1 << i) & p) change(t, E[i], t);
  return;
}
void mult(int x, int k, int t) {
  int pv = E[0] = x;
  for (int i = 1; (1 << i) <= k; ++i)
    change(pv, pv, E[i] = ++length), pv = length;
  for (int i = 0; (1 << i) <= k; ++i)
    if ((1 << i) & k) change(t, E[i], t);
  return;
}
void make_ti(int x, int t) {
  change2(x, D[0] = ++length);
  int pv = x;
  for (int i = 1; i <= d; ++i)
    D[i] = ++length, change(pv, length, length), pv = length;
  for (int i = 1; i <= d; ++i) change2(D[i], D[i]);
  for (int i = 0; i <= d; ++i)
    for (int j = 0; j <= d; ++j) a[i][j] = fast_pow(j, d - i) * C[d][i] % p;
  for (int i = 0; i <= d + 1; ++i) a[i][d + 1] = (i == 2);
  guass();
  change_zero(t);
  for (int i = 0; i <= d; ++i) mult(D[i], X[i], t);
  return;
}
int read() {
  char c = 0;
  int sum = 0;
  while (c < '0' || c > '9') c = getchar();
  while ('0' <= c && c <= '9') {
    sum = sum * 10 + c - '0';
    c = getchar();
  }
  return sum;
}
signed main() {
  d = read(), p = read();
  length = 2;
  for (int i = 0; i <= d; ++i) C[i][0] = 1;
  for (int i = 1; i <= d; ++i)
    for (int j = 1; j <= i; ++j) C[i][j] = (C[i - 1][j] + C[i - 1][j - 1]) % p;
  F[1] = 0;
  for (int i = 2; i <= d; ++i) {
    if ((1 << (F[i - 1] + 1)) <= i)
      F[i] = F[i - 1] + 1;
    else
      F[i] = F[i - 1];
  }
  change(1, 2, ++length);
  int t1 = ++length, t2 = ++length, t3 = ++length, t4 = ++length, t5 = ++length,
      t6 = ++length;
  make_ti(1, t1);
  make_ti(2, t2);
  make_ti(3, t3);
  change_zero(t4), mult(t1, p - 1, t4);
  change_zero(t5), mult(t2, p - 1, t5);
  change(t3, t4, t3);
  change(t3, t5, t3);
  change_zero(t6), mult(t3, fast_pow(2, p - 2), t6);
  printf("f %d\n", t6);
  return 0;
}
