#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define fi first #define se second #define rep(i,n) for(int i = 0; i < (n); ++i) #define rrep(i,n) for(int i = 1; i <= (n); ++i) #define drep(i,n) for(int i = (n)-1; i >= 0; --i) #define gep(i,g,j) for(int i = g.head[j]; i != -1; i = g.e[i].next) #define each(it,c) for(__typeof((c).begin()) it=(c).begin();it!=(c).end();it++) #define rng(a) a.begin(),a.end() #define maxs(x,y) x = max(x,y) #define mins(x,y) x = min(x,y) #define pb push_back #define sz(x) (int)(x).size() #define pcnt __builtin_popcount #define snuke srand((unsigned)clock()+(unsigned)time(NULL)); #define df(x) int x = in() using namespace std; typedef long long int ll; typedef pair P; typedef vector vi; typedef vector vvi; inline int in() { int x; scanf("%d",&x); return x;} inline void priv(vi a) { rep(i,sz(a)) printf("%d%c",a[i],i==sz(a)-1?'\n':' ');} const int MX = 105, MY = 8000005, INF = 1000010000; const ll LINF = 1000000000000000000ll; const double eps = 1e-10; int n; ll x; int a[MX], id[MX]; bitset dp[81]; map mp; int main() { scanf("%d%lld",&n,&x); rep(i,n) scanf("%d",&a[i]), id[i] = i; sort(id,id+n,[&](int x, int y){return a[x]>j&1) sum += a[s[j]]; ll r = x-sum; if (0 <= r && r <= MY && dp[n][r]) { string ans = string(n+m,'x'); rep(j,m) if (i>>j&1) ans[s[j]] = 'o'; drep(j,n) { int na = a[id[j]]; if (na <= r && dp[j][r-na]) ans[id[j]] = 'o', r -= na; } cout<