#include #include #include #include #include #include #include #include #define _USE_MATH_DEFINES #include #include #include #define REP(i,n) for(int (i)=0;(i)<(n);(i)++) #define RREP(i,n) for(int (i)=(n)-1;(i)>=0;(i)--) #define debug(x) cout< P; typedef priority_queue maxpq; typedef priority_queue,greater > minpq; typedef priority_queue

p_maxpq; typedef priority_queue,greater

> p_minpq; typedef vector veci; typedef vector

vecp; typedef vector vecs; #define INF 2000000000 struct edge{int to,cost;}; int N,T,A[50]; bool checked[50][100010]; bool memo[50][100010]; bool dfs(int i,int sum) { if(checked[i][sum]) return memo[i][sum]; if(i==N-1) { if(sum==T) return memo[i][sum] = true; else return memo[i][sum] = false; } if(sum+A[i+1] <= T) if(dfs(i+1,sum+A[i+1])) memo[i][sum] = true; if(sum*A[i+1] <= T) if(dfs(i+1,sum*A[i+1])) memo[i][sum] = true; checked[i][sum] = true; return memo[i][sum]; } int main(void) { cin >> N >> T; REP(i,N) cin >> A[i]; dfs(0,A[0]); char ans[50],sum = A[0]; REP(i,N-1) { if(memo[i+1][sum+A[i+1]]) { ans[i] = '+'; sum += A[i+1]; } else if(memo[i+1][sum*A[i+1]]) { ans[i] = '*'; sum *= A[i+1]; } } REP(i,N-1) cout << ans[i]; cout << endl; return 0; }