n, X = map(int, input().split()) A = list(map(int, input().split())) # 创建包含值和原索引的列表,并按值从大到小排序 elements = [] for i in range(n): elements.append((A[i], i)) elements.sort(reverse=True, key=lambda x: x[0]) # 预计算从每个位置i到末尾的元素总和 sum_remain = [0] * (n + 1) for i in range(n-1, -1, -1): sum_remain[i] = sum_remain[i+1] + elements[i][0] selected = [] found = False def backtrack(i, current_sum): global found if found: return if current_sum == X: found = True return if current_sum > X or i >= n: return # 剪枝条件:剩下的元素总和不足以达到目标 if current_sum + sum_remain[i] < X: return # 尝试不选当前元素 backtrack(i+1, current_sum) if found: return # 尝试选中当前元素 new_sum = current_sum + elements[i][0] if new_sum > X: return # 剪枝条件:剩下的元素总和不足以达到目标 if new_sum + sum_remain[i+1] < X: return selected.append(elements[i][1]) backtrack(i+1, new_sum) if found: return selected.pop() backtrack(0, 0) if found: result = ['x'] * n for idx in selected: result[idx] = 'o' print(''.join(result)) else: print("No")