from collections import Counter import string def defeat(prev: str, token: str): "min sort of token beating prev, or None" ctr = Counter(token) best = None for n_shared in range(len(prev)): pool = [c for c, v in ctr.items() if c > prev[n_shared] and v > 0] if pool: c = min(pool) ctr[c] -= 1 best = prev[:n_shared] + c + ''.join(sorted([c * v for c, v in ctr.items()])) ctr[c] += 1 # end if ctr[prev[n_shared]] > 0: ctr[prev[n_shared]] -= 1 else: return best # share all best = prev + ''.join(sorted([c*v for c, v in ctr.items()])) return best def solve(tokens): ret = [] for token in tokens: prev = ret[-1] if ret else "" res = defeat(prev, token) if res is None: return None ret.append(res) return ret tcn = int(input()) for tc in range(1, tcn+1): input() tokens = input().split() res = solve(tokens) verdict = "IMPOSSIBLE" if res is None else "POSSIBLE" print("Case #{}: {}".format(tc, verdict)) if res is not None: print(*res)