#include <bits/stdc++.h>
using namespace std;
inline long long read() {
  long long f = 1, ans = 0;
  char c = getchar();
  while (c < '0' || c > '9') {
    if (c == '-') f = -1;
    c = getchar();
  }
  while (c >= '0' && c <= '9') {
    ans = ans * 10 + c - '0';
    c = getchar();
  }
  return f * ans;
}
long long lowbit(long long x) { return x & -x; }
vector<pair<long long, pair<long long, long long> > > vec;
void calc(long long &x) {
  long long cc = 0, s = x;
  while (s) {
    cc++;
    s /= 2ll;
  }
  s = x;
  for (long long i = 1; i < cc; i++) {
    vec.push_back(make_pair(1, make_pair(s, s)));
    s *= 2ll;
  }
  long long y = s;
  vec.push_back(make_pair(0, make_pair(x, y)));
  long long z = x ^ y;
  vec.push_back(make_pair(1, make_pair(y, z)));
  long long p = y + z;
  vec.push_back(make_pair(0, make_pair(p, x)));
  long long q = p ^ x;
  vec.push_back(make_pair(1, make_pair(y, y)));
  long long h = 2 * y;
  vec.push_back(make_pair(0, make_pair(q, h)));
  long long e = q ^ h;
  while (e <= z) {
    if (z & e) vec.push_back(make_pair(0, make_pair(z, e))), z ^= e;
    vec.push_back(make_pair(1, make_pair(e, e))), e *= 2ll;
  }
  x = z;
  return;
}
long long X;
signed main() {
  X = read();
  while (X != 1) calc(X);
  printf("%lu\n", vec.size());
  for (auto pp : vec) {
    if (pp.first)
      printf("%lld + %lld\n", pp.second.first, pp.second.second);
    else
      printf("%lld ^ %lld\n", pp.second.first, pp.second.second);
  }
  return 0;
}
