/**
 * code generated by JHelper
 * More info: https://github.com/AlexeyDmitriev/JHelper
 * @author aajisaka
 */

#include<bits/stdc++.h>

using namespace std;

void debug_out() { cerr << endl; }
template <typename Head, typename... Tail>
void debug_out(Head H, Tail... T) {
  cerr << " " << to_string(H);
  debug_out(T...);
}
#ifdef LOCAL
#define debug(...) cerr << "[" << #__VA_ARGS__ << "]:", debug_out(__VA_ARGS__)
#else
#define debug(...) 42
#endif

#define SPEED ios_base::sync_with_stdio(false);cin.tie(nullptr)
#define rep(i,n) for(int i=0; i<(int)(n); i++)
#define all(v) v.begin(), v.end()
template<class T> inline bool chmax(T& a, T b) { if (a < b) { a = b; return true; } return false; }
template<class T> inline bool chmin(T& a, T b) { if (a > b) { a = b; return true; } return false; }

using ll = long long;
using ull = unsigned long long;
using P = pair<ll, ll>;

constexpr long double PI = 3.14159265358979323846264338327950288L;
mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count());

class EProductSimulation {
public:

    vector<vector<int>> ret;

    int a = 0;
    int b = 1;
    int ans = 2;
    int ab = 3;
    int zero = 10;
    int one = 11;

    int w1 = 1000;
    int w2 = 1001;
    int w3 = 1002;
    int w4 = 1003;

    // u = s + t;
    void add(int s, int t, int u) {
      ret.push_back({0, s, t, u});
    }

    void isLower(int s, int t, int u) {
      ret.push_back({1, s, t, u});
    }

    // s << x
    void shift(int s, int x) {
      for(int i=0; i<x; i++) {
        add(s, s, s);
      }
    }

    // v = u;
    void set(int u, int v) {
      isLower(v, v, v);
      add(u, v, v);
    }

    // u = s - t;
    void subtract(int s, int t, int u) {
      set(s, w1); // s
      set(t, w2); // t
      add(w1, one, w1);
      for(int i=30; i>=0; i--) {
        int powerOfTwo = one+i; // 2^i
        add(powerOfTwo, w2, w3); // w3 = t + 2^i
        isLower(w3, w1, w4); // w4 = (w3 < s)
        add(zero, w4, u+i);
        shift(w4, i);
        add(w4, w2, w2);
      }
    }

    void solve(istream& cin, ostream& cout) {
      SPEED;

#if LOCAL
      int A, B; cin >> A >> B;
      vector<ll> v(200000);
      v[0] = A; v[1] = B;
#endif

      ret.push_back({0, a, b, ab});
      ret.push_back({1, zero, ab, one});

      for(int i=one; i<=one+61; i++) {
        ret.push_back({0, i, i, i+1});
      }

      subtract(a, zero, 100);
      subtract(b, zero, 200);

      for(int k=60; k>=0; k--) {
        add(ans, ans, ans);
        for(int i=0; i<=k; i++) {
          int j = k-i;
          if (i<31 && j<31) {
            add(100+i, 200+j, w1);
            isLower(one, w1, w1);
            add(ans, w1, ans);
          }
        }
      }

#if not LOCAL
      cout << ret.size() << endl;
#endif
      for(auto e: ret) {
        if (e[0] == 0) {
#if LOCAL
          v[e[3]] = v[e[1]] + v[e[2]];
          if (v[e[3]] > 0) {
            //debug(e[1], e[2], e[3]);
            //debug(e[3], v[e[3]]);
          }
#else
          cout << "+ ";
#endif
        } else {
#if LOCAL
          if (v[e[1]] < v[e[2]]) {
            v[e[3]] = 1;
            //debug(e[1], e[2], e[3]);
          } else {
            v[e[3]] = 0;
          }
#else
          cout << "< ";
#endif
        }
#if not LOCAL
        cout << e[1] << ' ' << e[2] << ' ' << e[3] << '\n';
#endif
      }
#if LOCAL
      cout << v[2] << endl;
#endif
    }
};

signed main() {
  EProductSimulation solver;
  std::istream& in(std::cin);
  std::ostream& out(std::cout);
  solver.solve(in, out);
  return 0;
}

Measured memory_bytes: 3868