#include <bits/stdc++.h>
using namespace std;
struct osc {
  int x;
  long long y, z;
} ans[100050];
long long n, sum;
int main() {
  scanf("%lld", &n);
  ans[++sum] = (osc){0, n, n};
  ans[++sum] = (osc){1, n, 2 * n};
  ans[++sum] = (osc){0, n, n ^ (2 * n)};
  long long tmp1 = n + (n ^ (2 * n)), tmp2 = tmp1;
  int high = 60, low = 0;
  for (; ((tmp1 >> high) & 1) == 0;) high--;
  for (; ((tmp1 >> low) & 1) == 0;) low++;
  for (int i = low; i < high; i++) {
    ans[++sum] = (osc){0, tmp2, tmp2};
    tmp2 = tmp2 * 2;
  }
  ans[++sum] = (osc){0, tmp1, tmp2};
  ans[++sum] = (osc){1, tmp1, tmp2};
  ans[++sum] = (osc){1, (tmp1 + tmp2), (tmp1 ^ tmp2)};
  long long tmp3 = (tmp1 + tmp2) ^ tmp1 ^ tmp2;
  for (; tmp3 != 1;) {
    for (long long tmp5 = tmp3; tmp5 < ((1LL) << 60); tmp5 <<= 1)
      ans[++sum] = (osc){0, tmp5, tmp5};
    long long tmp4 = n;
    for (int i = 60; (1LL << i) >= tmp3; i--)
      if ((tmp4 >> i) & 1) {
        ans[++sum] = (osc){1, (1LL << i), tmp4};
        tmp4 ^= (1LL << i);
      }
    for (; tmp4 != (tmp4 & (-tmp4));) {
      if (tmp4 < tmp3) {
        ans[++sum] = (osc){0, tmp4, tmp4};
        tmp4 *= 2;
      } else {
        ans[++sum] = (osc){1, tmp3, tmp4};
        tmp4 -= tmp3;
      }
    }
    tmp3 = tmp4;
  }
  printf("%lld\n", sum);
  for (int i = 1; i <= sum; i++) {
    if (ans[i].x == 0)
      printf("%lld + %lld\n", ans[i].y, ans[i].z);
    else
      printf("%lld ^ %lld\n", ans[i].y, ans[i].z);
  }
  return 0;
}
