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

#define LL long long

//5: 2^0, 6: 2^1, ..., 35: 2^30

struct Node
{
	char op;
	int a, b, c;
	Node(char C = 0, int X = 0, int Y = 0, int Z = 0) { op = C; a = X; b = Y; c = Z; }
};

int id[65];
LL v[200005];

vector<Node> ans;

inline void add(int a, int b, int c) { ans.push_back( Node('+', a, b, c) ); v[c] = v[a] + v[b]; }

inline void cmp(int a, int b, int c) { ans.push_back( Node('<', a, b, c) ); v[c] = (v[a] < v[b]); }

int main()
{
	add(0, 1, 3); cmp(5, 3, 5);

	id[0] = 5;
	for(int i = 6; i <= 35; i++)
	{
		int x = i - 5;
		add(5, i, i);
		for(int j = 1; j <= x; j++) add(i, i, i);
		id[x] = i;
	}

	//36 ~ 65: A, 66 ~ 95: B, 96 ~ 155: C
	add(0, 5, 500);
	for(int i = 65; i >= 36; i--)
	{
		int x = i - 36;
		add(id[x], 200, 201); 
		cmp(201, 500, 202); add(4, 202, i);
		for(int j = 1; j <= x; j++) add(202, 202, 202);
		add(200, 202, 200);
	}
	add(1, 5, 500); add(4, 4, 200);
	for(int i = 95; i >= 66; i--)
	{
		int x = i - 66;
		add(id[x], 200, 201);
		cmp(201, 500, 202); add(4, 202, i);
		for(int j = 1; j <= x; j++) add(202, 202, 202);
		add(200, 202, 200);
	}
	for(int i = 36; i <= 65; i++)
		for(int j = 66; j <= 95; j++)
		{
			int x = i - 36, y = j - 66, p = 96 + x + y;
			add(i, j, 200);
			cmp(5, 200, 201);
			add(p, 201, p);
		}
	for(int i = 96; i <= 155; i++)
	{
		int x = i - 96;
		for(int j = 1; j <= x; j++) add(i, i, i);
		add(2, i, 2);
	}

	printf("%lu\n", ans.size());
	for(int i = 0; i < ans.size(); i++) printf("%c %d %d %d\n", ans[i].op, ans[i].a, ans[i].b, ans[i].c);
	return 0;
}
