#include <bits/stdc++.h>
using namespace std;
string s;
int dp[1000003];
int preffix[1000003];
int par[1000003];
vector<pair<int, bool> > ans;
void get(int l, int r) {
  ans.push_back(make_pair(s.size() - r, false));
  ans.push_back(make_pair(s.size() - l + 1, true));
  for (int i = l; i < r; i++)
    if (s[i - 1] == '0') ans.push_back(make_pair(s.size() - i, false));
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(nullptr);
  cin >> s;
  int last = -1;
  for (int i = 1; i <= s.size(); i++) {
    preffix[i] = preffix[i - 1] + (s[i - 1] == '0');
    if (s[i - 1] == '0') {
      par[i] = i - 1;
      dp[i] = dp[i - 1];
    } else {
      dp[i] = dp[i - 1] + 1;
      par[i] = i - 1;
      if (last == -1) {
        if (preffix[i] + 2 < dp[i]) {
          dp[i] = preffix[i] + 2;
          par[i] = 0;
        }
      } else {
        if (dp[last - 1] + preffix[i] - preffix[last] + 2 < dp[i]) {
          dp[i] = dp[last - 1] + preffix[i] - preffix[last] + 2;
          par[i] = last;
        }
      }
    }
    if (i >= 2 && s[i - 1] == '0' && s[i - 2] == '0') last = i;
  }
  int curr = s.size();
  while (curr) {
    if (par[curr] == curr - 1) {
      if (s[curr - 1] == '1') ans.push_back(make_pair(s.size() - curr, true));
    } else
      get(par[curr] + 1, curr);
    curr = par[curr];
  }
  cout << ans.size() << endl;
  for (auto i : ans) {
    if (i.second == true)
      cout << "+";
    else
      cout << "-";
    cout << "2^" << i.first << endl;
  }
}
