from string import ascii_uppercase from collections import Counter def partition(P): P = [''.join(sorted(p)) for p in P] N = len(P) for i in range(1, N): prev = P[i-1] p = P[i] if ''.join(sorted(p, reverse=True)) < prev: return None n = len(p) C = Counter(p) slen = min(n, len(prev)) for j in range(slen): C[prev[j]] -= 1 bad = {k for k, v in C.items() if v < 0} if not bad and n >= len(prev): P[i] = prev + ''.join(sorted(C.elements())) continue for plen in range(slen-1, -1, -1): c = prev[plen] C[c] += 1 if C[c] == 0: bad.remove(c) if not bad: found = '' for c in ascii_uppercase: if c > prev[plen] and C[c] > 0: found = c break if found != '': C[found] -= 1 P[i] = prev[:plen] + found + ''.join(sorted(C.elements())) # print(plen, prev[plen], found) break else: assert False return P for t in range(int(input())): print(f"Case #{t+1}:", end=" ") N, S = input().split() N = int(N) M = len(S) if N == 2: for i in range(1, M): p = [S[:i], S[i:]] if partition(p) is None: print("POSSIBLE") print(*p) break else: print("IMPOSSIBLE") else: found = False for i in range(1, M): for j in range(i+1, M): p = [S[:i], S[i:j], S[j:]] if partition(p) is None: print("POSSIBLE") print(*p) found = True break if found: break if not found: print("IMPOSSIBLE")