#include <bits/stdc++.h>
using namespace std;
typedef long double ld;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<double, double> pdd;
typedef vector<double> vd;
typedef vector<vd> vvd;
typedef vector<ll> vl;
typedef vector<vl> vvl;
typedef pair<int, int> pii;
typedef vector<pii> vii;
typedef vector<int> vi;
typedef vector<vi> vvi;
typedef vector<string> vs;
//const int mod = ;

const int DEBUG = 0;
const int N = 200000;
const unsigned long long M = 10000000000000000000ULL;

vector<array<int, 4>> cmd;
int itmem = 3;
int one, zero, opand, summulone, summulone1, summulone2, summul, summul1, summul2, summul3;
const int PW = 30;
vi pw2(PW);
vi pwdec(PW);

void apply(vl& v, array<int, 4> c) {
  if (c[0]) {
    v[c[3]] = v[c[1]] < v[c[2]];
  } else {
    v[c[3]] = v[c[1]] + v[c[2]];
    assert((ull)v[c[3]] <= M && v[c[3]] >= 0);
    if (c[3] == opand) assert(v[c[3]] >= 0 && v[c[3]] <= 2);
  }
}

void addand(int i, int j, int k) {
  cmd.push_back({0, i, j, opand});
  cmd.push_back({1, one, opand, k});
}

void mulone(int a, int x, int k) {
  cmd.push_back({0, zero, zero, summulone});
  cmd.push_back({0, zero, zero, k});
  for (int t = pwdec.size() - 1; t >= 0; --t) {
    cmd.push_back({0, summulone, pwdec[t], summulone1});
    cmd.push_back({1, summulone1, a, summulone2});
    addand(x, summulone2, summulone2);
    for (int i = 0; i < t; ++i) {
      cmd.push_back({0, summulone2, summulone2, summulone2});
    }
    cmd.push_back({0, summulone2, k, k});
    cmd.push_back({0, summulone2, summulone, summulone});
  }
}

void mul(int a, int b, int k) {
  cmd.push_back({0, zero, zero, summul});
  cmd.push_back({0, zero, zero, k});
  for (int t = pwdec.size() - 1; t >= 0; --t) {
    cmd.push_back({0, summul, pwdec[t], summul1});
    cmd.push_back({1, summul1, b, summul2});
    mulone(a, summul2, summul3);
    for (int i = 0; i < t; ++i) {
      cmd.push_back({0, summul3, summul3, summul3});
      cmd.push_back({0, summul2, summul2, summul2});
    }
    cmd.push_back({0, summul3, k, k});
    cmd.push_back({0, summul2, summul, summul});
  }
}

int main() {
  std::ios::sync_with_stdio(false); std::cin.tie(0);
  zero = itmem++;
  one = itmem;
  cmd.push_back({0, 0, 1, N - 1});
  cmd.push_back({1, N - 2, N - 1, itmem++});
  pw2[0] = one;
  for (int i = 1; i < pw2.size(); ++i) {
    pw2[i] = itmem;
    cmd.push_back({0, pw2[i - 1], pw2[i - 1], itmem++});
  }
  pwdec[0] = zero;
  for (int i = 1; i < pwdec.size(); ++i) {
    pwdec[i] = itmem;
    cmd.push_back({0, pwdec[i - 1], pwdec[i - 1], itmem});
    cmd.push_back({0, itmem, one, itmem});
    ++itmem;
  }
  opand = itmem++;
  summulone = itmem++;
  summulone1 = itmem++;
  summulone2 = itmem++;
  summul = itmem++;
  summul1 = itmem++;
  summul2 = itmem++;
  summul3 = itmem++;
  mul(0, 1, 2);

  assert(cmd.size() < N);
  cout << cmd.size() << endl;
  for (auto x : cmd) {
    if (x[0] == 0) cout << '+';
    else cout << '<';
    assert(x[1] >= 0 && x[1] < N);
    assert(x[2] >= 0 && x[2] < N);
    assert(x[3] >= 0 && x[3] < N);
    cout << ' ' << x[1] << ' ' << x[2] << ' ' << x[3] << '\n';
  }
  cout << endl;
  if (DEBUG) {
    const int MAX = 11;
    for (int t = 0; t < 1000; ++t) {
      vl v(N);
      v[0] = rand() % MAX;
      v[1] = rand() % MAX;
      for (auto x : cmd) {
        apply(v, x);
      }
      if (v[0] + v[1]) for (int i = 0; i < pw2.size(); ++i) {
        assert(v[pw2[i]] == (1 << i));
        assert(v[pw2[i]] == 1 + v[pwdec[i]]);
      }
      cerr << v[0] << ' ' << v[1] << ' ' << v[2] << endl;
      assert(v[2] == v[0] * v[1]);
    }
  }
  return 0;
}


Measured memory_bytes: 3796