Problem: This is an output-only problem. You shouldn't read anything from the input.

In short, your task is to simulate multiplication by using only comparison (x < y) and addition (x + y). There is no input in this problem, you just print a sequence of operations.

Imagine that there is a big array a[0], a[1], ..., a[N-1] of length N. The first two values are initially two non-negative integers A and B (which are unknown to you), the other elements are zeros. Your goal is to get the product A \cdot B in a[2] at the end.

You are allowed operations of two types, with the following format (where 0 \leq i, j, k < N):

* `+ i j k` — applies operation a[k] = a[i] + a[j].
* `< i j k` — applies operation a[k] = a[i] < a[j]. That is, if a[i] < a[j] then a[k] becomes 1, otherwise it becomes 0.



You can use at most Q operations. Elements of a can't exceed V. Indices (i, j, k) don't have to be distinct. It's allowed to modify any element of the array (including the first two). The actual checker simulates the process for multiple pairs (A, B) within a single test. Each time, the checker chooses values A and B, creates the array a = [A, B, 0, 0, \ldots, 0], applies all your operations and ensures that a[2] = A \cdot B.

Constraints

* 0 \leq A, B \leq 10^9
* N = Q = 200\,000
* V = 10^{19} = 10\,000\,000\,000\,000\,000\,000

Input

The Standard Input is empty.

Output

In the first line, print the number of operations. Each operation should then be printed in a single line of format `+ i j k` or `< i j k`.

Example

Input




Output

Solution (in CPP):

Solution:
/**
 * 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;
}