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;
class Mod {
 public:
  int mod;
  Mod(int mod_ = 1e9 + 7) : mod(mod_) {}
  int add(int a, int b) { return (a + b) % mod; }
  int mul(long long a, int b) { return (a * b) % mod; }
  int pow(long long a, int x) {
    int ans = 1;
    while (x) {
      if (x & 1) {
        ans = (ans * a) % mod;
      }
      x >>= 1;
      a = (a * a) % mod;
    }
    return ans;
  }
};
class IO {
 public:
  static void read(int &val) { scanf("%d", &val); }
  static void read(long long &val) { scanf("%lld", &val); }
  static void read(char *val) { scanf("%s", val); }
  static void read(string &val) {
    const int BUFFER_SIZE = 1e5 + 5;
    static char buffer[BUFFER_SIZE];
    scanf("%s", buffer);
    val = buffer;
  }
  static void read_n(vector<int> &val, int n) {
    val.resize(n);
    for (int i = 0; i < n; i++) {
      scanf("%d", &val[i]);
    }
  }
  static void write(int val) { printf("%d\n", val); }
  static void write(long long val) { printf("%lld\n", val); }
  static void write(const char *val) { printf("%s\n", val); }
  static void write(const string &val) { printf("%s\n", val.c_str()); }
  static void write(const vector<int> &val) {
    for (int i = 0; i < val.size(); i++) {
      if (i > 0) {
        putchar(' ');
      }
      printf("%d", val[i]);
    }
    putchar('\n');
  }
};
long long gcd_ex(long long a, long long b, long long &x, long long &y) {
  if (b == 0) {
    x = 1;
    y = 0;
    return a;
  }
  long long ans = gcd_ex(b, a % b, y, x);
  y -= (a / b) * x;
  return ans;
}
class Solver {
  long long x;
  stringstream ans;
  int cnt_ans = 0;
  void print(long long x, long long a) {
    long long cur = 0;
    while (a) {
      if (a & 1) {
        if (cur > 0) {
          ans << cur << " + " << x << endl;
          cnt_ans++;
        }
        cur += x;
      }
      a >>= 1;
      ans << x << " + " << x << endl;
      cnt_ans++;
      x <<= 1;
    }
  }

 public:
  void read() { IO::read(x); }
  void solve() {
    long long e = 1;
    while ((e << 1) <= x) {
      e <<= 1;
    }
    print(x, e);
    ans << e * x << " ^ " << x << endl;
    cnt_ans++;
    long long y = ((e * x) ^ x);
    long long a, b;
    gcd_ex(x, y, a, b);
    if (a < 0) {
      swap(a, b);
      swap(x, y);
    }
    b = -b;
    if (!(a & 1)) {
      a += y;
      b += x;
    }
    print(x, a);
    print(y, b);
    ans << a * x << " ^ " << b * y << endl;
    cnt_ans++;
    IO::write(cnt_ans);
    IO::write(ans.str());
  }
};
void init() { ios::sync_with_stdio(false); }
int main() {
  init();
  int t = 1;
  while (t--) {
    Solver solver;
    solver.read();
    solver.solve();
  }
  return 0;
}