#include #include using namespace std; typedef long long ll; const int threshold = 35000; template struct DP2 { vector dp; int h, w; DP2(int h_, int w_, T init):h(h_),w(w_),dp(h_*w_, init){} T& operator()(int i, int j) { return dp[i*w+j]; } }; int main(){ int N; ll X; cin >> N >> X; vector> A, B; int Asum = 0; for(int i=0;i> t; if(t < threshold){ A.emplace_back(i, t); Asum += t; } else { B.emplace_back(i, t); } } DP2 dp(A.size() + 1, Asum + 1, 0); DP2 pre(A.size() + 1, Asum + 1, -1); dp(0, 0) = true; for(int i=0;i= 0 && dp(i, sum - A[i].second)){ dp(i + 1, sum) = 1; pre(i + 1, sum) = i; } } } for(int m=0;m<1<> i) & 1){ Bsum += B[i].second; } if(Bsum > X || X - Bsum > Asum || !dp(A.size(), X - Bsum))continue; string res(N, 'x'); for(int i=0;i> i) & 1){ res[B[i].first] = 'o'; } ll rem = X - Bsum; int k = A.size(); while(rem > 0){ int p = pre(k, rem); res[A[p].first] = 'o'; k = p; rem -= A[p].second; } cout << res << endl; return 0; } cout << "No" << endl; return 0; }