#include <bits/stdc++.h>
using namespace std;


#define PR(a, n) {cerr << #a << " = "; for (int _=1; _<=n; ++_) cerr << a[_] <<' '; cerr << '\n';}
#define PR0(a, n) {cerr << #a << " = "; for (int _=0; _<n; ++_) cerr << a[_] <<' '; cerr << '\n';}
#define db(x) {cerr << #x << " = " << x << '\n';}
#define FILE_NAME "data"


const int L = 30;
const int N = 200000;


struct Query {
    char opt;
    int i, j, k;

    Query() {}

    Query(char opt, int i, int j, int k): opt(opt), i(i), j(j), k(k) {}
};


int64_t a[N];
vector<Query> res;


void askSum(int i, int j, int k) {
    res.push_back(Query('+', i, j, k));
    a[k] = a[i] + a[j];
}


void askCompare(int i, int j, int k) {
    res.push_back(Query('<', i, j, k));
    a[k] = (a[i] < a[j]);
}


void buildPow2(int pos, int deg) {
    askSum(N - 2, N - 3, pos);

    for (int i = 0; i < deg; ++i) {
        askSum(pos, pos, pos);
    }
}


void zeroReset(int pos) {
    askSum(N - 3, N - 4, pos);
}


void buildOne(int pos) {
    askCompare(pos, 0, pos);
    askCompare(N - 1, 1, N - 1);
    askSum(N - 1, pos, pos);
    askCompare(N - 3, pos, pos);
    zeroReset(N - 1);
}


void binaryMul(int i, int j, int pos) {
    askCompare(N - 3, i, N - 6);
    askCompare(N - 3, j, N - 7);

    askSum(N - 6, N - 7, pos);
    askCompare(N - 2, pos, pos);

    zeroReset(N - 6);
    zeroReset(N - 7);
}


void trace() {
    for (int i = 1; i <= N; ++i) {
        if (a[i]) {
            cerr << i << ": " << a[i] << '\n';
        }
    }
    cerr << "------------------\n";
}


int main() {
    #ifdef ACM
        freopen("out.txt", "w", stdout);
    #endif
    a[0] = 0;
    a[1] = 1;

    // A[N - 2] = 1
    // A[N - 3] = 0
    // A[N - 4] = 0
    // A[n - 1]: temp

    buildOne(N - 2);
    trace();

    for (int i = L - 1; i >= 0; --i) {
        buildPow2(N - 1, i);
        trace();

        for (int j = L - 1; j > i; --j) {
            askSum(j + 4, N - 1, N - 1);
            trace();
        }

        askSum(0, N - 2, N - 5);
        trace();
        askCompare(N - 1, N - 5, i + 4);
        trace();

        for (int j = 0; j < i; ++j) {
            askSum(i + 4, i + 4, i + 4);
        }

        zeroReset(N - 5);
        zeroReset(N - 1);
        trace();
    }
    trace();

    for (int i = L - 1; i >= 0; --i) {
        buildPow2(N - 1, i);
        trace();

        for (int j = L - 1; j > i; --j) {
            askSum(j + 4 + L, N - 1, N - 1);
            trace();
        }

        askSum(1, N - 2, N - 5);
        trace();
        askCompare(N - 1, N - 5, i + 4 + L);
        trace();

        for (int j = 0; j < i; ++j) {
            askSum(i + 4 + L, i + 4 + L, i + 4 + L);
        }
        trace();

        zeroReset(N - 5);
        zeroReset(N - 1);
        trace();
    }
    trace();

    // a: 4 -> L + 3
    // b: L + 4 -> 2 * L + 3
    // a * b: 2 * L + 4 -> 4 * L + 3
    
    for (int i = 0; i < L; ++i) {
        for (int j = 0; j < L; ++j) {
            binaryMul(i + 4, j + 4 + L, N - 8);
            for (int t = 0; t < i + j; ++t) {
                askSum(N - 8, N - 8, N - 8);
            }
            trace();
            
            askSum(N - 8, 2, 2);
            zeroReset(N - 8);
            trace();
        }
    }

    db(a[2])
    cout << res.size() << '\n';
    for (auto q : res) {
        cout << q.opt << ' ' << q.i << ' ' << q.j << ' ' << q.k << '\n';
    }
}


Measured memory_bytes: 4204