Problem: You have a blackboard and initially only an odd number x is written on it. Your goal is to write the number 1 on the blackboard.

You may write new numbers on the blackboard with the following two operations. 

  * You may take two numbers (not necessarily distinct) already on the blackboard and write their sum on the blackboard. The two numbers you have chosen remain on the blackboard. 
  * You may take two numbers (not necessarily distinct) already on the blackboard and write their [bitwise XOR](https://en.wikipedia.org/wiki/Bitwise_operation#XOR) on the blackboard. The two numbers you have chosen remain on the blackboard. 

Perform a sequence of operations such that at the end the number 1 is on the blackboard.

Input

The single line of the input contains the odd integer x (3 ≤ x ≤ 999,999).

Output

Print on the first line the number q of operations you perform. Then q lines should follow, each describing one operation. 

  * The "sum" operation is described by the line "a + b", where a, b must be integers already present on the blackboard. 
  * The "xor" operation is described by the line "a ^ b", where a, b must be integers already present on the blackboard. 

The operation symbol (+ or ^) must be separated from a, b by a whitespace.

You can perform at most 100,000 operations (that is, q≤ 100,000) and all numbers written on the blackboard must be in the range [0, 5⋅10^{18}]. It can be proven that under such restrictions the required sequence of operations exists. You can output any suitable sequence of operations.

Examples

Input


3


Output


5
3 + 3
3 ^ 6
3 + 5
3 + 6
8 ^ 9


Input


123


Output


10
123 + 123
123 ^ 246
141 + 123
246 + 123
264 ^ 369
121 + 246
367 ^ 369
30 + 30
60 + 60
120 ^ 121

Solution (in CPP):

Solution:
#include <bits/stdc++.h>
using namespace std;
using lint = long long int;
using P = pair<int, int>;
using PL = pair<lint, lint>;
constexpr int MOD = 1000000007;
constexpr lint B1 = 1532834020;
constexpr lint M1 = 2147482409;
constexpr lint B2 = 1388622299;
constexpr lint M2 = 2147478017;
constexpr int INF = 2147483647;
void yes(bool expr) { cout << (expr ? "Yes" : "No") << "\n"; }
template <class T>
void chmax(T &a, const T &b) {
  if (a < b) a = b;
}
template <class T>
void chmin(T &a, const T &b) {
  if (b < a) a = b;
}
struct op {
  lint a, b;
  int type;
};
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  lint x;
  cin >> x;
  vector<op> ans;
  if (x >> 1 & 1) {
    ans.push_back(op{x, x, 0});
    ans.push_back(op{2 * x, x, 1});
    x = (x * 2) ^ x;
  }
  while (x != 1) {
    lint k = 0;
    for (int i = (60) - 1, i_begin_ = (0); i >= i_begin_; i--)
      if (x >> i & 1) {
        k = i;
        break;
      }
    lint y = x;
    for (int i = (0), i_end_ = (k); i < i_end_; i++) {
      ans.push_back(op{y, y, 0});
      y *= 2;
    }
    ans.push_back(op{x, y, 0});
    ans.push_back(op{x, y, 1});
    ans.push_back(op{x + y, x ^ y, 1});
    lint z = (x + y) ^ (x ^ y);
    k++;
    while (true) {
      if (y >> k & 1) {
        ans.push_back(op{y, z, 1});
        y ^= z;
      }
      int bit = 0;
      for (int i = (0), i_end_ = (60); i < i_end_; i++)
        if (y >> i & 1) bit++;
      if (bit <= 1) break;
      ans.push_back(op{z, z, 0});
      z *= 2;
      k++;
    }
    ans.push_back(op{x, y, 1});
    x ^= y;
  }
  cout << ans.size() << endl;
  for (int i = (0), i_end_ = (ans.size()); i < i_end_; i++) {
    if (ans[i].type == 0)
      cout << ans[i].a << " + " << ans[i].b << endl;
    else
      cout << ans[i].a << " ^ " << ans[i].b << endl;
  }
}