// yukicoder: No.332 数列をプレゼントに // 2019.7.8 bal4u #include #include typedef long long ll; #if 1 #define gc() getchar_unlocked() #define pc(c) putchar_unlocked(c) #else #define gc() getchar() #define pc(c) putchar(c) #endif ll in() { // 非負整数の入力 ll n = 0; int c = gc(); do n = 10 * n + (c & 0xf); while ((c = gc()) >= '0'); return n; } void outs(char *s) { while (*s) pc(*s++); pc('\n'); } void outc(int f, char c) { while (f--) pc(c); pc('\n'); } #define LIM 100000 int N; ll X; int a[102], b[102]; int fa, fb; int dp[80*LIM]; char f[102]; void final(int p, int q) { int i; // printf("final: p=%d, q=%x\n", p, q); fflush(stdout); while (p) { // printf("p=%d, prev=%d, id=%d\n", p, dp[p] >> 7, (dp[p] & 127)-2); f[(dp[p] & 127)-2] = 1; p = dp[p] >> 7; } for (i = 0; q; i++) { if (q & 1) f[fa-1+i] = 1; q >>= 1; } for (i = 0; i < N; i++) pc(f[i]? 'o': 'x'); pc('\n'); #if 0 ll s = 0; for (i = 0; i < N; i++) if (f[i]) { if (i+2 <= fa) s += a[i+2]; else s += b[i+1-fa]; } printf("sum = %lld\n", s); #endif exit(0); } int main() { int i, j, x, ma; ll s; N = (int)in(), X = in(), s = 0, fa = 1; for (i = 0; i < N; i++) { x = (int)in(), s += x; if (x <= LIM) a[++fa] = x; else b[fb++] = x; } if (s == X) { outc(N, 'o'); return 0; } // printf("fa=%d, fb=%d\n", fa, fb); dp[0] = 1, ma = 0; for (i = 2; i <= fa; i++) { for (j = ma; j >= 0; j--) { if (dp[j] && !dp[j+a[i]]) dp[j+a[i]] = (j << 7) | i; } ma += a[i]; } // printf("ma=%d\n", ma); if (X <= ma && dp[X]) final(X, 0); i = 1 << fb; while (--i) { s = 0, x = i; for (j = 0; x; j++) { if (x & 1) s += b[j]; x >>= 1; } if (s <= X && X-s <= ma && dp[X-s]) final(X-s, i); } outs("No"); return 0; }