#include <bits/stdc++.h>
using namespace std;
const int INF = 1000000002;
const long long INFLL = 100000000000000000ll;
const long long MOD = 1000000007;
int N, R[1000005], O[1000005];
string S;
int E[25];
string tostr(int n) {
  if (n == 0) return "0";
  string ret;
  while (n) {
    ret += (char)(n % 10 + '0');
    n /= 10;
  }
  reverse(ret.begin(), ret.end());
  return ret;
}
string binary(int n) {
  string ret;
  while (n) {
    ret += (char)(n % 2 + '0');
    n /= 2;
  }
  reverse(ret.begin(), ret.end());
  return ret;
}
int main() {
  S += '0';
  string t;
  cin >> t;
  S += t;
  N = ((int)S.size()) - 1;
  S += '0';
  S += '0';
  vector<string> ans;
  for (int i = (1); i <= (N); i++) {
    if (S[i] == '1') {
      if (S[i + 1] != '1') {
        ans.push_back("+2^" + tostr(N - i));
        continue;
      }
      int e = N - i + 1;
      ans.push_back("+2^" + tostr(e));
      while (true) {
        int j = i + 1;
        while (S[j] == '1') j++;
        i = j;
        if (S[j + 1] != '1') {
          ans.push_back("-2^" + tostr(N - j + 1));
          break;
        } else {
          ans.push_back("-2^" + tostr(N - j));
        }
      }
    }
  }
  cout << ((int)ans.size()) << "\n";
  for (string s : ans) cout << s << "\n";
}
