#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#include <bits/stdc++.h>

using namespace __gnu_pbds;
using namespace std;

using ll = long long;
using ld = long double;

#define mp make_pair

typedef tree<
        pair<int, int>,
        null_type,
        less<pair<int, int>>,
        rb_tree_tag,
        tree_order_statistics_node_update>
        ordered_set;


const int p = 1000000007;


int mul(int a, int b) {
    return (1LL * a * b) % p;
}

int add(int a, int b) {
    int s = (a+b);
    if (s>=p) s-=p;
    return s;
}

int sub(int a, int b) {
    int s = (a+p-b);
    if (s>=p) s-=p;
    return s;
}

int po(int a, int deg)
{
    if (deg==0) return 1;
    if (deg%2==1) return mul(a, po(a, deg-1));
    int t = po(a, deg/2);
    return mul(t, t);
}

int inv(int n)
{
    return po(n, p-2);
}


mt19937 rnd(time(0));

/*
const int N = 1200000;

vector<int> facs(N), invfacs(N);

void init()
{
    facs[0] = 1;
    for (int i = 1; i<N; i++) facs[i] = mul(facs[i-1], i);
    invfacs[N-1] = inv(facs[N-1]);
    for (int i = N-2; i>=0; i--) invfacs[i] = mul(invfacs[i+1], i+1);
}

int C(int n, int k)
{
    if (n<k) return 0;
    return mul(facs[n], mul(invfacs[k], invfacs[n-k]));
}
*/


const int N = 200000;

vector<ll> a(N);

const int DEGS = 100;

const int ONE = N-1;

const int ZERO = N-2;

int cnt = 0;

void add(int i, int j, int k)
{
    cnt++;
    cout<<"+ "<<i<<' '<<j<<' '<<k<<endl;
    a[k] = a[i] + a[j];
}

void cmp(int i, int j, int k)
{
    cnt++;
    cout<<"< "<<i<<' '<<j<<' '<<k<<endl;
    a[k] = (a[i]<a[j]);
}

const int FREE = 150000;

void AND(int i, int j, int k)
{
    add(ZERO, i, FREE);
    add(ZERO, j, FREE+1);
    add(FREE, FREE+1, FREE+2);
    cmp(FREE, FREE+1, FREE+3);
    cmp(FREE+1, FREE, FREE+4);
    add(FREE+3, FREE+4, FREE+5);
    cmp(FREE+5, FREE+2, k);
}

int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(nullptr);

    //cin>>a[0]>>a[1];

    cout<<34474<<endl;

    add(0, 1, N-1);
    cmp(N-2, N-1, N-1);
    //N-2: 0, N-1: 1

    add(0, ONE, 0);
    add(1, ONE, 1);

    //cout<<a[0]<<' '<<a[1]<<endl;

    //Degs of 2:
    add(DEGS, ONE, DEGS);
    for (int i = 1; i<60; i++)
    {
        add(DEGS+i-1, DEGS+i-1, DEGS+i);
    }

    /*for (int i = 0; i<60; i++) cout<<a[DEGS + i]<<' ';
    cout<<endl;*/

    const int A = 110000;

    //Restoring A
    //Saving
    //A+i = if bit i is present
    //A+30 = a itself
    for (int i = 29; i>=0; i--)
    {
        add(A+30, DEGS + i, A+31);
        cmp(A+31, 0, A+i);
        add(ZERO, A+i, A+31);
        for (int j = 0; j<i; j++) add(A+31, A+31, A+31);
        add(A+31, A+30, A+30);
    }

    /*for (int i = 0; i<30; i++) cout<<a[A+i]<<' ';
    cout<<endl;*/


    const int B = 120000;

    for (int i = 29; i>=0; i--)
    {
        add(B+30, DEGS + i, B+31);
        cmp(B+31, 1, B+i);
        add(ZERO, B+i, B+31);
        for (int j = 0; j<i; j++) add(B+31, B+31, B+31);
        add(B+31, B+30, B+30);
    }

    /*for (int i = 0; i<30; i++) cout<<a[B+i]<<' ';
    cout<<endl;*/

    const int TMP = N-3;

    for (int i = 0; i<30; i++)
        for (int j = 0; j<30; j++)
        {
            AND(A+i, B+j, TMP);
            for (int x = 0; x<(i+j); x++) add(TMP, TMP, TMP);
            add(TMP, 2, 2);
        }

    //cout<<cnt;
    

}


Measured memory_bytes: 4556