import sys import itertools from typing import List def get_input_form_stdin(): contents = [] while True: try: line = input() except EOFError: break contents.append(line) return contents def get_input_from_file(input_file_name): input_file = open(input_file_name) contents = input_file.readlines() return contents def compare_char(a, b): if ord(a) == ord(b): return 0 elif ord(a) < ord(b): return 1 return -1 def least_char(input_string): min_value = input_string[0] min_pos = 1 for index, ch in enumerate(input_string, 1): if ch < min_value: min_pos = index min_value = ch return min_pos, min_value def is_sorted(sub_string_list): sorted_list = sub_string_list.copy() sorted_list.sort() return sorted_list == sub_string_list def increase_value(to_be_mod, increase_compare, index): letters_bigger = (x for x in to_be_mod[index:] if ord(x) >= ord(increase_compare[index])) letters_bigger_array = [] for x in letters_bigger: letters_bigger_array.append((x, to_be_mod.index(x))) if len(letters_bigger_array) == 0: return False candidate_index = letters_bigger_array[0][1] return to_be_mod[:index] + to_be_mod[candidate_index] + to_be_mod[index:candidate_index] + to_be_mod[ candidate_index + 1:] def resolve_case(index, num_substrings: int, sub_string_list): if is_sorted(sub_string_list): return True, sub_string_list is_possible = False solution = sub_string_list solution[0] = ''.join(sorted(solution[0])) index = 1 while index < len(solution): a = solution[index - 1] solution[index] = ''.join(sorted(solution[index])) if is_sorted([a, solution[index]]): index += 1 continue char_index = 0 while char_index + 1 <= len(solution[index]) and not is_sorted([a, solution[index]]): inc = increase_value(solution[index], a, char_index) if inc == False: return False, [] solution[index] = inc char_index += 1 index += 1 is_possible = is_sorted(solution) return is_possible, solution if __name__ == '__main__': with_files = False input_file_name = "" output_file_name = input_file_name.replace("input", "output") if with_files: input_content = get_input_from_file(input_file_name) else: input_content = get_input_form_stdin() output = "" num_test_cases = int(input_content[0]) for i in range(1, num_test_cases * 2, 2): index = int(((i + 1) / 2)) num_substrings = int(input_content[i]) sub_string_list = input_content[i + 1].split() is_possible, solution = resolve_case(index, num_substrings, sub_string_list) output += "Case #" + str(index) + ": " if is_possible: output += "POSSIBLE" output += "\n" for item in solution: output += item + " " output = output.strip() else: output += "IMPOSSIBLE" output += "\n" if with_files: output_file = open(output_file_name, 'w') output_file.writelines(output) output_file.close() print(output) else: print(output)