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;
struct ura {
  long long a, b, fel;
};
vector<ura> rz;
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  long long n, i, j = 5, s = 0;
  cin >> n;
  for (i = n; 1; i += n) {
    long long ci = i;
    if ((ci & 2LL) == 0) ci = (ci xor (2LL * ci));
    if ((((((2 * 1LL * ci) xor ci) + ci) xor (3 * 1LL * ci))) == ci - 2LL)
      break;
  }
  long long cn = n;
  long long vlc = n;
  long long ad;
  while (vlc < i) {
    if (vlc * 2 < i) ad = vlc;
    while (vlc + ad > i) {
      ad /= 2LL;
    }
    rz.push_back({vlc, ad, 1});
    vlc = vlc + ad;
  }
  n = i;
  if ((n & 2LL) == 0) {
    rz.push_back({n, n, 1});
    rz.push_back({n, 2 * 1LL * n, 0});
    n = (n xor (2 * 1LL * n));
  }
  rz.push_back({n, n, 1});
  rz.push_back({n, 2 * 1LL * n, 1});
  rz.push_back({2 * 1LL * n, n, 0});
  rz.push_back({((2 * 1LL * n) xor n), n, 1});
  rz.push_back({(((2 * 1LL * n) xor n) + n), 3 * 1LL * n, 0});
  rz.push_back({n - 2LL, n, 0});
  for (i = 2; i <= 999999999999 * 1LL * 3; i *= 2LL) {
    rz.push_back({i, i, 1});
  }
  for (i = 2; i <= 999999999999 * 1LL * 3; i *= 2LL) {
    if (n & i) {
      rz.push_back({i, n, 0});
      n ^= i;
    }
  }
  cout << rz.size() << '\n';
  for (i = 0; i < rz.size(); ++i) {
    if (rz[i].fel == 1)
      cout << rz[i].a << " + " << rz[i].b << '\n';
    else
      cout << rz[i].a << " ^ " << rz[i].b << '\n';
  }
}