#include <bits/stdc++.h>
using namespace std;
const int base = 31;
const int _mod = 2147483629;
const int mod = 1e9 + 7;
const int inf = 0x3f3f3f3f;
const long long linf = 0x3f3f3f3f3f3f3f3fLL;
const double eps = 1e-9;
const double Pi = 3.141592653589793;
const double deg_rad = Pi / 180.0;
const double rad_deg = 180.0 / Pi;
template <typename T>
void _err(T t) {
  cerr << t << " ";
}
template <typename T, typename... _T>
void _err(T t, _T... args) {
  cerr << t << " ";
  _err(args...);
}
template <typename T>
inline void Max(T& a, T b) {
  if (b > a) a = b;
}
template <typename T>
inline void Min(T& a, T b) {
  if (b < a) a = b;
}
template <typename T, typename _T>
inline T pw(T b, _T e) {
  T rep = 1;
  for (; e; e >>= 1, b *= b) rep = rep * (e & 1 ? b : 1);
  return rep;
}
template <typename T, typename _T, typename __T>
inline T pw_m(T b, _T e, __T mod) {
  T rep = 1;
  for (; e; e >>= 1, b = b * b % mod) rep = rep * (e & 1 ? b : 1) % mod;
  return rep;
}
struct Point {
  int x, y;
  Point() {}
  Point(int _x, int _y) : x(_x), y(_y) {}
  long long sqrdist(Point p) {
    return 1LL * (p.x - x) * (p.x - x) + 1LL * (p.y - y) * (p.y - y);
  }
  long double dist(Point p) {
    return sqrt(1LL * (p.x - x) * (p.x - x) + 1LL * (p.y - y) * (p.y - y));
  }
  int mahdist(Point p) { return abs(p.x - x) + abs(p.y - y); }
  void rot(Point O, int angle) {
    double c = cos(angle * deg_rad), s = sin(angle * deg_rad);
    x += ((O.x - x) * c) - ((y - O.y) * s);
    y += ((y - O.y) * c) - ((O.x - x) * s);
  }
};
int a[100005];
long long s;
string rep;
int main() {
  ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);
  int n;
  cin >> n;
  for (int i = 1; i <= n; ++i) cin >> a[i];
  for (int i = n; i; --i)
    if (llabs(s + a[i]) <= a[i])
      s += a[i], rep += '+';
    else
      s -= a[i], rep += '-';
  reverse((rep).begin(), (rep).end());
  if (s <= a[1] && s >= 0) {
    cout << rep;
    return 0;
  }
  for (int i = 0; i < (int)rep.length(); ++i)
    cout << (rep[i] == '+' ? '-' : '+');
  return 0;
}
