def main(): import sys sys.setrecursionlimit(1000000) n, x = map(int, sys.stdin.readline().split()) a = list(map(int, sys.stdin.readline().split())) # 预处理:排除所有大于x的元素,并记录它们的索引 elements = [(a[i], i) for i in range(n) if a[i] <= x] m = len(elements) if m == 0: print("No") return sum_total = sum(num for num, idx in elements) if sum_total < x: print("No") return # 按降序排列 elements.sort(reverse=True, key=lambda x: x[0]) # 计算后缀和 suffix_sum = [0] * (m + 1) for i in range(m-1, -1, -1): suffix_sum[i] = suffix_sum[i+1] + elements[i][0] selected = [False] * n # 回溯函数 def backtrack(pos, current_sum, path): if current_sum == x: for idx in path: selected[elements[idx][1]] = True return True if pos >= m: return False # 不选当前元素 if backtrack(pos + 1, current_sum, path): return True # 选当前元素,如果当前sum + 元素的值 <=x 并且加上后缀和可能达到x if current_sum + elements[pos][0] > x: return False if current_sum + elements[pos][0] + suffix_sum[pos+1] < x: return False # 剪枝 if backtrack(pos + 1, current_sum + elements[pos][0], path + [pos]): return True return False found = backtrack(0, 0, []) if found: s = ''.join('o' if selected[i] else 'x' for i in range(n)) print(s) else: print("No") if __name__ == "__main__": main()