#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:16777216")
using namespace std;
class Data {
 public:
  int x[4];
  int start;
  Data() { start = 0; }
  void shift(int k) {}
  Data getMin();
  bool isZero() { return x[0] == 1 && x[1] == 1 && x[2] == 1 && x[3] == 1; }
};
bool operator<(const Data &a, const Data &b) {
  return memcmp(a.x, b.x, sizeof(int) * 4) < 0;
}
Data Data::getMin() {
  Data Min = *this, a = *this;
  for (int i = 1; i < 4; i++) {
    a.shift(1);
    if (a < Min) Min = a;
  }
  return Min;
}
set<Data> M;
vector<string> res;
bool getRes(Data u, bool add) {
  int i;
  if (u.isZero()) return true;
  Data v;
  char str[10];
  for (i = 0; i < 4; i++)
    if (u.x[i] % 2 == 0 && u.x[(i + 1) % 4] % 2 == 0) {
      v = u;
      v.x[i] /= 2;
      v.x[(i + 1) % 4] /= 2;
      int a1 = (i - v.start + 4) % 4;
      sprintf(str, "/%d", a1 + 1);
      if (M.find(v) == M.end()) {
        M.insert(v);
        if (getRes(v.getMin(), false)) {
          res.push_back(str);
          return true;
        }
      }
    }
  int j;
  for (i = 1; add == false && i < 16; i++) {
    v = u;
    for (j = 0; j < 4; j++)
      if (i & (1 << j)) {
        v.x[j]++;
        v.x[(j + 1) % 4]++;
      }
    if (M.find(v) == M.end()) {
      M.insert(v);
      if (getRes(v.getMin(), true)) {
        for (j = 0; j < 4; j++)
          if (i & (1 << j)) {
            int a1 = (j - v.start + 4) % 4;
            sprintf(str, "+%d", a1 + 1);
            res.push_back(str);
          }
        return true;
      }
    }
  }
  return false;
}
int main() {
  Data u;
  int i;
  for (i = 0; i < 4; i++) cin >> u.x[i];
  if (getRes(u.getMin(), false)) {
    for (i = res.size() - 1; i >= 0; i--) cout << res[i] << endl;
  } else
    cout << "-1\n";
  return 0;
}
