#include <bits/stdc++.h>
 
using namespace std;
 
#define DEBUG(x) cerr<<#x<<": "<<x<<endl;
#define DEBUG_VEC(v) cerr<<#v<<":";for(int i=0;i<v.size();i++) cerr<<" "<<v[i]; cerr<<endl;
#define DEBUG_MAT(v) cerr<<#v<<endl;for(int i=0;i<v.size();i++){for(int j=0;j<v[i].size();j++) {cerr<<v[i][j]<<" ";}cerr<<endl;}
typedef long long ll;
#define int ll
 
#define vi vector<int>
#define vl vector<ll>
#define vii vector< vector<int> >
#define vll vector< vector<ll> >
#define vs vector<string>
#define pii pair<int,int>
#define pis pair<int,string>
#define psi pair<string,int>
#define pll pair<ll,ll>
template<class S, class T> pair<S, T> operator+(const pair<S, T> &s, const pair<S, T> &t) { return pair<S, T>(s.first + t.first, s.second + t.second); }
template<class S, class T> pair<S, T> operator-(const pair<S, T> &s, const pair<S, T> &t) { return pair<S, T>(s.first - t.first, s.second - t.second); }
template<class S, class T> ostream& operator<<(ostream& os, pair<S, T> p) { os << "(" << p.first << ", " << p.second << ")"; return os; }
#define X first
#define Y second
#define rep(i,n) for(int i=0;i<(int)(n);i++)
#define rep1(i,n) for(int i=1;i<=(int)(n);i++)
#define rrep(i,n) for(int i=(int)(n)-1;i>=0;i--)
#define rrep1(i,n) for(int i=(int)(n);i>0;i--)
#define REP(i,a,b) for(int i=a;i<b;i++)
#define in(x, a, b) (a <= x && x < b)
#define all(c) c.begin(),c.end()
template<class T> bool chmax(T &a, const T &b) { if (a<b) { a = b; return 1; } return 0; }
template<class T> bool chmin(T &a, const T &b) { if (a>b) { a = b; return 1; } return 0; }
#define UNIQUE(v) v.erase(std::unique(v.begin(), v.end()), v.end());
const ll inf = 1000000001;
const ll INF = (ll)1e18 + 1;
const long double pi = 3.1415926535897932384626433832795028841971L;
#define Sp(p) cout<<setprecision(25)<< fixed<<p<<endl;
// int dx[4] = {1, 0, -1, 0}, dy[4] = {0, 1, 0, -1};
// int dx2[8] = { 1,1,0,-1,-1,-1,0,1 }, dy2[8] = { 0,1,1,1,0,-1,-1,-1 };
vi dx = {1, 0, -1, 0}, dy = {0, 1, 0, -1};
// vi dx2 = { 1,1,0,-1,-1,-1,0,1 }, dy2 = { 0,1,1,1,0,-1,-1,-1 };
#define fio() cin.tie(0); ios::sync_with_stdio(false);
const ll MOD = 1000000007;
// const ll MOD = 998244353;
// #define mp make_pair
//#define endl '\n'



int two = 199990;
int one = 199998;
int zero = 199999;
int nishin = 3;
int keta = 61;
vector<char> op;
vi is, js, ks;
vi start = {100, 180};

int solve(int x, int y) {
    vi a(200000);
    a[0] = x;
    a[1] = y;

    rep (idx, op.size()) {
        int i = is[idx], j = js[idx], k = ks[idx];
        char c = op[idx];
        if (c == '<') {
            if (a[i] < a[j]) a[k] = 1;
            else a[k] = 0;
        }
        else {
            a[k] = a[i] + a[j];
        }
    }

    for (int idx: start) {
        rrep (j, keta) {
            cout << a[idx + j];
        }
        cout << endl;
    }

    return a[2];
}

vi a(200000);

// void minus(int i, int j, int k, vector<char>& op, vi& is, vi& js, vi& ks) {
//     int temp = 1200;
//     op.push_back('+');
//     is.push_back(j);
//     js.push_back(zero);
//     ks.push_back(temp);
//     for (int l = 60; l >= 0; l--) {
//         op.push_back('+');
//         is.push_back(temp);
//         js.push_back(nishin + l);
//         ks.push_back(temp + 1);

//         op.push_back('<');
//         is.push_back(i);
//         js.push_back(temp + 1);
//         ks.push_back(temp + 1);

//         op.push_back('<');
//         is.push_back(temp + 1);
//         js.push_back(one);
//         ks.push_back(temp + 1);

//         op.push_back('+');
//         is.push_back(temp + 2);
//         js.push_back(temp + 2);
//         ks.push_back(temp + 2);

//         op.push_back('+');
//         is.push_back(temp + 2);
//         js.push_back(temp + 1);
//         ks.push_back(temp + 2);
//     }
// }

void comp(int i, int j, int k) {
    op.push_back('<');
    is.push_back(i);
    js.push_back(j);
    ks.push_back(k);

    if (a[i] < a[j]) a[k] = 1;
    else a[k] = 0;
}

void add(int i, int j, int k) {
    op.push_back('+');
    is.push_back(i);
    js.push_back(j);
    ks.push_back(k);
    
    a[k] = a[i] + a[j];
}

signed main() {
    a[0] = 13; a[1] = 21;

    comp(zero, 0, two + 1);
    comp(zero, 1, two + 2);
    add(two + 1, two + 2, two + 3);
    comp(zero, two + 3, two + 4);
    rep (_, 2) {
        add(two, two + 4, two);
    }

    comp(zero, two, one);

    // 二のべき乗
    add(zero, one, nishin);
    vl power2(keta);
    power2[0] = 1;
    for (int i = 1; i < keta; i++) {
        add(nishin + i - 1, nishin + i - 1, nishin + i);
        power2[i] = 2 * power2[i - 1];
    }


    int temp = 199980;
    rep (i, 2) {
        for (int j = keta - 1; j >= 0; j--) {
            add(temp, nishin + j, temp + 1);
            comp(i, temp + 1, temp + 1);
            comp(temp + 1, one, temp + 2);
            add(zero, temp + 2, start[i] + j);

            rep (_, j) {
                add(temp + 2, temp + 2, temp + 2);
            }
            add(temp, temp + 2, temp);
        }
        add(zero, zero, temp);
    }

    assert(op.size() == is.size());
    assert(op.size() == js.size());
    assert(op.size() == ks.size());

    rep (i, 33) {
        int idx1 = start[0] + i;
        rep (j, 33) {
            int idx2 = start[1] + j;

            add(idx1, idx2, temp);
            comp(temp, two, temp);
            comp(temp, one, temp);

            rep (k, i + j) {
                add(temp, temp, temp);
            }
            add(2, temp, 2);
        }
    }

    cout << op.size() << endl;
    rep (i, op.size()) {
        cout << op[i] << " " << is[i] << " " << js[i] << " " << ks[i] << endl;
    }
}


Measured memory_bytes: 6140