#include <bits/stdc++.h>
using namespace std;
vector<string> vec_splitter(string s) {
  for (char &c : s) c = c == ',' ? ' ' : c;
  stringstream ss;
  ss << s;
  vector<string> res;
  for (string z; ss >> z; res.push_back(z))
    ;
  return res;
}
void debug_out(vector<string> args, int idx) { cerr << endl; }
template <typename Head, typename... Tail>
void debug_out(vector<string> args, int idx, Head H, Tail... T) {
  if (idx > 0) cerr << ", ";
  stringstream ss;
  ss << H;
  cerr << args[idx] << " = " << ss.str();
  debug_out(args, idx + 1, T...);
}
void localTest() {}
vector<pair<long long, pair<char, long long>>> ans;
long long xorOp(long long a, long long b) {
  ans.push_back({a, {'^', b}});
  return a ^ b;
}
long long addOp(long long a, long long b) {
  ans.push_back({a, {'+', b}});
  return a + b;
}
long long mulOp(long long n, long long a) {
  long long ret = n;
  a--;
  while (a > 0) {
    if (a & 1) {
      ret = addOp(n, ret);
    }
    a >>= 1;
    n = addOp(n, n);
  }
  return ret;
}
long long shiftOp(long long n, long long a) {
  while (a--) {
    n = addOp(n, n);
  }
  return n;
}
long long gcd(long long a, long long b) {
  if (a < b) {
    swap(a, b);
  }
  if (!b) {
    return a;
  }
  return gcd(b, a % b);
}
long long gcd(long long a, long long b, long long &x, long long &y) {
  if (!b) {
    x = 1;
    y = 0;
    return a;
  }
  long long x1, y1, d = gcd(b, a % b, x1, y1);
  x = y1;
  y = x1 - y1 * (a / b);
  return d;
}
int main() {
  localTest();
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  long long x, ox;
  cin >> x;
  ox = x;
  if (x % 4 == 3) {
    addOp(x, x);
    x = xorOp(x, 2 * x);
  }
  if (x != 1) {
    long long msb = 0;
    while (x >= (1LL << (msb + 1))) {
      msb++;
    }
    long long sx = shiftOp(x, msb);
    xorOp(x, sx);
    addOp(x, sx);
    long long val = xorOp(x + sx, x ^ sx);
    long long a, b;
    long long g = gcd(ox, val, a, b);
    long long y, y1;
    assert(g == 1);
    if (a <= 0) {
      while (a <= 0) {
        a += val;
        b -= ox;
      }
      if (abs(b) % 2) {
        b -= ox;
        a += val;
      }
    } else {
      if (abs(b) % 2) {
        b -= ox;
        a += val;
      }
    }
    y = mulOp(val, -b);
    y1 = mulOp(ox, a);
    x = xorOp(y1, y);
    assert(x == 1);
  }
  cout << ans.size() << "\n";
  for (auto p : ans) {
    cout << p.first << " " << p.second.first << " " << p.second.second << "\n";
  }
  return 0;
}
