#include <cassert>
#include <cctype>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <algorithm>
#include <bitset>
#include <deque>
#include <iostream>
#include <iomanip>
#include <limits>
#include <list>
#include <map>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <utility>
#include <vector>
using namespace std;
typedef long long ll;
typedef long double ld;
typedef pair <int, int> pii;
typedef pair <ll, ll> pll;
typedef vector <int> vi;
typedef vector <string> vs;
#define FOR(i, a, b) for (int i = (a); i <= (b); i++)
#define FORD(i, a, b) for (int i = (a); i >= (b); i--)
#define REP(i, a) for (int i = 0; i < (a); i++)
#define REPD(i, a) for (int i = ((a) - 1); i >= 0; i--)
#define FIT(it, v) for (typeof((v).begin())it = (v).begin(); it != (v).end(); ++it)
#define FITD(it, v) for (typeof((v).rbegin())it = (v).rbegin(); it != (v).rend(); ++it)
#define VAR(a, b) typeof(b) a(b)
#define ALL(v) (v).begin(), (v).end()
#define SET(a, x) memset((a), (x), sizeof(a))
#define SIZE(a) ((int)(a).size())
#define EXIST(a, b) (find(ALL(a), (b)) != (a).end())
#define SORT(x) sort(ALL(x))
#define GSORT(x) sort(ALL(x), greater<typeof(*((x).begin()))>())
#define UNIQUE(v) SORT(v); (v).resize(unique(ALL(v)) - (v).begin())
#define ENUM(v) FIT(it, (v)) cout << *it << " "; cout << endl
#define PF push_front
#define PB push_back
#define MP make_pair
#define F first
#define S second
// bit operater
int BIT(ll x,int i) { return(x&(1<<i));}
ll ONBIT(int i,ll x){ return(x|(1<<i));}
ll OFFBIT(int i,ll x){return (x& ~(1<<i));}
ll FLIPBIT(int i,ll x){return (x^(1<<i));}
const char IN[] = "_.in";
const char OUT[] = "_.out";
const int maxn=310;
const int offset=40000;
int n,f;
int a[100];
int visited[51][80100];
int sig[51][80100];
bool ok[100][3];
bool can;
void dp(int i,int val)
{
if (visited[i][val]!=-1)
{
if (visited[i][val]==1)
{
can=true;
int tg=f+offset;
int id=n;
while (tg!=offset || id!=0)
{
if (sig[id][tg]==1)
{
ok[id][1]=true;
tg=tg-a[id];
id--;
}
else
if (sig[id][tg]==0)
{
ok[id][0]=true;
tg=tg+a[id];
id--;
}
}
}
return;
}
if (i==n+1)
{
if (val==f+offset)
{
int tg=f+offset;
int id=n;
while (tg!=offset || id!=0)
{
if (sig[id][tg]==1)
{
ok[id][1]=true;
tg=tg-a[id];
id--;
}
else
if (sig[id][tg]==0)
{
ok[id][0]=true;
tg=tg+a[id];
id--;
}
}
can=true;
visited[i][val]=true;
}
else
{
visited[i][val]=false;
}
return;
}
sig[i][val+a[i]]=1; // +
dp(i+1,val+a[i]);
if (visited[i+1][val+a[i]]==true)
{
visited[i][val]=true;
}
sig[i][val-a[i]]=0; // -
dp(i+1,val-a[i]);
if (visited[i+1][val-a[i]])
{
visited[i][val]=true;
}
if (visited[i][val]==-1) visited[i][val]=0;
return;
}
int main() {
//freopen(IN, "r", stdin);
//freopen(OUT, "w", stdout);
while (cin>>n>>f)
{
if (n==0 && f==0) break;
FOR(i,1,n) cin>>a[i];
SET(sig,-1);
SET(visited,-1);
SET(ok,false);
can=false;
dp(1,offset);
if (can==false) puts("*");
else
{
FOR(i,1,n)
if (ok[i][1] && ok[i][0]) printf("?");
else
if (ok[i][0]) printf("-");
else
if (ok[i][1]) printf("+");
puts("");
}
}
return 0;
}
I2luY2x1ZGUgPGNhc3NlcnQ+CiNpbmNsdWRlIDxjY3R5cGU+CiNpbmNsdWRlIDxjbWF0aD4KI2luY2x1ZGUgPGNzdGRpbz4KI2luY2x1ZGUgPGNzdGRsaWI+CiNpbmNsdWRlIDxjc3RyaW5nPgojaW5jbHVkZSA8Y3RpbWU+CiNpbmNsdWRlIDxhbGdvcml0aG0+CiNpbmNsdWRlIDxiaXRzZXQ+CiNpbmNsdWRlIDxkZXF1ZT4KI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8aW9tYW5pcD4KI2luY2x1ZGUgPGxpbWl0cz4KI2luY2x1ZGUgPGxpc3Q+CiNpbmNsdWRlIDxtYXA+CiNpbmNsdWRlIDxxdWV1ZT4KI2luY2x1ZGUgPHNldD4KI2luY2x1ZGUgPHNzdHJlYW0+CiNpbmNsdWRlIDxzdGFjaz4KI2luY2x1ZGUgPHV0aWxpdHk+CiNpbmNsdWRlIDx2ZWN0b3I+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdHlwZWRlZiBsb25nIGxvbmcgbGw7CnR5cGVkZWYgbG9uZyBkb3VibGUgbGQ7CnR5cGVkZWYgcGFpciA8aW50LCBpbnQ+IHBpaTsKdHlwZWRlZiBwYWlyIDxsbCwgbGw+IHBsbDsKdHlwZWRlZiB2ZWN0b3IgPGludD4gdmk7CnR5cGVkZWYgdmVjdG9yIDxzdHJpbmc+IHZzOwoKCiNkZWZpbmUgRk9SKGksIGEsIGIpIGZvciAoaW50IGkgPSAoYSk7IGkgPD0gKGIpOyBpKyspCiNkZWZpbmUgRk9SRChpLCBhLCBiKSBmb3IgKGludCBpID0gKGEpOyBpID49IChiKTsgaS0tKQojZGVmaW5lIFJFUChpLCBhKSBmb3IgKGludCBpID0gMDsgaSA8IChhKTsgaSsrKQojZGVmaW5lIFJFUEQoaSwgYSkgZm9yIChpbnQgaSA9ICgoYSkgLSAxKTsgaSA+PSAwOyBpLS0pCiNkZWZpbmUgRklUKGl0LCB2KSBmb3IgKHR5cGVvZigodikuYmVnaW4oKSlpdCA9ICh2KS5iZWdpbigpOyBpdCAhPSAodikuZW5kKCk7ICsraXQpCiNkZWZpbmUgRklURChpdCwgdikgZm9yICh0eXBlb2YoKHYpLnJiZWdpbigpKWl0ID0gKHYpLnJiZWdpbigpOyBpdCAhPSAodikucmVuZCgpOyArK2l0KQoKI2RlZmluZSBWQVIoYSwgYikgdHlwZW9mKGIpIGEoYikKI2RlZmluZSBBTEwodikgKHYpLmJlZ2luKCksICh2KS5lbmQoKQojZGVmaW5lIFNFVChhLCB4KSBtZW1zZXQoKGEpLCAoeCksIHNpemVvZihhKSkKI2RlZmluZSBTSVpFKGEpICgoaW50KShhKS5zaXplKCkpCgojZGVmaW5lIEVYSVNUKGEsIGIpIChmaW5kKEFMTChhKSwgKGIpKSAhPSAoYSkuZW5kKCkpCiNkZWZpbmUgU09SVCh4KSBzb3J0KEFMTCh4KSkKI2RlZmluZSBHU09SVCh4KSBzb3J0KEFMTCh4KSwgZ3JlYXRlcjx0eXBlb2YoKigoeCkuYmVnaW4oKSkpPigpKQojZGVmaW5lIFVOSVFVRSh2KSBTT1JUKHYpOyAodikucmVzaXplKHVuaXF1ZShBTEwodikpIC0gKHYpLmJlZ2luKCkpCiNkZWZpbmUgRU5VTSh2KSBGSVQoaXQsICh2KSkgY291dCA8PCAqaXQgPDwgIiAiOyBjb3V0IDw8IGVuZGwKCiNkZWZpbmUgUEYgcHVzaF9mcm9udAojZGVmaW5lIFBCIHB1c2hfYmFjawojZGVmaW5lIE1QIG1ha2VfcGFpcgojZGVmaW5lIEYgZmlyc3QKI2RlZmluZSBTIHNlY29uZAoKLy8gYml0IG9wZXJhdGVyCmludCBCSVQobGwgeCxpbnQgaSkgeyByZXR1cm4oeCYoMTw8aSkpO30KbGwgT05CSVQoaW50IGksbGwgeCl7IHJldHVybih4fCgxPDxpKSk7fQpsbCBPRkZCSVQoaW50IGksbGwgeCl7cmV0dXJuICh4JiB+KDE8PGkpKTt9CmxsIEZMSVBCSVQoaW50IGksbGwgeCl7cmV0dXJuICh4XigxPDxpKSk7fQoKY29uc3QgY2hhciBJTltdID0gIl8uaW4iOwpjb25zdCBjaGFyIE9VVFtdID0gIl8ub3V0IjsKY29uc3QgaW50IG1heG49MzEwOwpjb25zdCBpbnQgb2Zmc2V0PTQwMDAwOwppbnQgbixmOwppbnQgYVsxMDBdOwppbnQgdmlzaXRlZFs1MV1bODAxMDBdOwppbnQgc2lnWzUxXVs4MDEwMF07CmJvb2wgb2tbMTAwXVszXTsKYm9vbCBjYW47CnZvaWQgZHAoaW50IGksaW50IHZhbCkKewoJaWYgKHZpc2l0ZWRbaV1bdmFsXSE9LTEpIAoJewoJCWlmICh2aXNpdGVkW2ldW3ZhbF09PTEpCgkJewoJCQljYW49dHJ1ZTsKCQkJaW50IHRnPWYrb2Zmc2V0OwoJCQlpbnQgaWQ9bjsKCQkJd2hpbGUgKHRnIT1vZmZzZXQgfHwgaWQhPTApCgkJCXsKCQkJCWlmIChzaWdbaWRdW3RnXT09MSkgCgkJCQl7CgkJCQkJb2tbaWRdWzFdPXRydWU7CgkJCQkJdGc9dGctYVtpZF07CgkJCQkJaWQtLTsKCQkJCX0KCQkJCWVsc2UKCQkJCWlmIChzaWdbaWRdW3RnXT09MCkgCgkJCQl7CgkJCQkJb2tbaWRdWzBdPXRydWU7CgkJCQkJdGc9dGcrYVtpZF07CgkJCQkJaWQtLTsKCQkJCX0KCQkJfQkJCQoJCX0KCQlyZXR1cm47CQkKCX0JCgkKCWlmIChpPT1uKzEpCgl7CgkJaWYgKHZhbD09ZitvZmZzZXQpCgkJewoJCQlpbnQgdGc9ZitvZmZzZXQ7CgkJCWludCBpZD1uOwoJCQl3aGlsZSAodGchPW9mZnNldCB8fCBpZCE9MCkKCQkJewoJCQkJaWYgKHNpZ1tpZF1bdGddPT0xKSAKCQkJCXsKCQkJCQlva1tpZF1bMV09dHJ1ZTsKCQkJCQl0Zz10Zy1hW2lkXTsKCQkJCQlpZC0tOwoJCQkJfQkJCQkKCQkJCWVsc2UKCQkJCWlmIChzaWdbaWRdW3RnXT09MCkgCgkJCQl7CgkJCQkJb2tbaWRdWzBdPXRydWU7CgkJCQkJdGc9dGcrYVtpZF07CgkJCQkJaWQtLTsKCQkJCX0KCQkJfQoJCSAgICBjYW49dHJ1ZTsKCQkgICAgdmlzaXRlZFtpXVt2YWxdPXRydWU7CQkgICAgCgkJfQkKCQllbHNlCgkJewoJCQl2aXNpdGVkW2ldW3ZhbF09ZmFsc2U7CgkJfQoJCXJldHVybjsJCQoJfQoJCgkKCXNpZ1tpXVt2YWwrYVtpXV09MTsgLy8gKwoJZHAoaSsxLHZhbCthW2ldKTsKCWlmICh2aXNpdGVkW2krMV1bdmFsK2FbaV1dPT10cnVlKQoJewoJCXZpc2l0ZWRbaV1bdmFsXT10cnVlOwkJCgl9CglzaWdbaV1bdmFsLWFbaV1dPTA7IC8vIC0KCWRwKGkrMSx2YWwtYVtpXSk7CglpZiAodmlzaXRlZFtpKzFdW3ZhbC1hW2ldXSkKCXsKCQl2aXNpdGVkW2ldW3ZhbF09dHJ1ZTsJCQoJfQkKCWlmICh2aXNpdGVkW2ldW3ZhbF09PS0xKSB2aXNpdGVkW2ldW3ZhbF09MDsgICAgCglyZXR1cm47Cn0KaW50IG1haW4oKSB7CiAgLy9mcmVvcGVuKElOLCAiciIsIHN0ZGluKTsKICAvL2ZyZW9wZW4oT1VULCAidyIsIHN0ZG91dCk7ICAKICB3aGlsZSAoY2luPj5uPj5mKQogIHsKICAJaWYgKG49PTAgJiYgZj09MCkgYnJlYWs7CiAgCUZPUihpLDEsbikgY2luPj5hW2ldOwogIAlTRVQoc2lnLC0xKTsKICAJU0VUKHZpc2l0ZWQsLTEpOwogIAlTRVQob2ssZmFsc2UpOwogIAljYW49ZmFsc2U7CiAgCWRwKDEsb2Zmc2V0KTsgIAkKICAJaWYgKGNhbj09ZmFsc2UpIHB1dHMoIioiKTsKICAJZWxzZQogIAl7CiAgCQlGT1IoaSwxLG4pCiAgCQlpZiAob2tbaV1bMV0gJiYgb2tbaV1bMF0pIHByaW50ZigiPyIpOwogIAkJZWxzZQogIAkJaWYgKG9rW2ldWzBdKSBwcmludGYoIi0iKTsKICAJCWVsc2UKICAJCWlmIChva1tpXVsxXSkgcHJpbnRmKCIrIik7CiAgCQlwdXRzKCIiKTsKICAJfQogIH0KICByZXR1cm4gMDsKfQ==