#include typedef long long ll; typedef unsigned long long ull; #define FOR(i,a,b) for(int (i)=(a);i<(b);i++) #define REP(i,n) FOR(i,0,n) #define RANGE(vec) (vec).begin(),(vec).end() using namespace std; class AddOrMul { public: void solve(void) { int N, Total; cin>>N>>Total; vector A(N); REP(i, N) cin>>A[i]; vector ans; // 全探索 + 枝刈り function dfs = [&](int sum, int i, const string &str) { if (i == N) { if (sum == Total) ans.push_back(str); return; } if (sum+A[i] <= Total) dfs(sum+A[i], i+1, str+"+"); if (sum*A[i] <= Total) dfs(sum*A[i], i+1, str+"*"); return; }; dfs(A[0], 1, ""); // 通常の辞書式順序とは違うので自前でやる sort(RANGE(ans), [](const string &a, const string &b){ REP(i, a.length()) { if (a[i] == b[i]) continue; if (a[i] == '+') return true; return false; } return false; }); cout<solve(); delete obj; return 0; } #endif