def letter_id(c): return ord(c)-ord('A') def rest(freq): ans = [] for i in range(26): if freq[i] > 0: ans.append((chr(ord('A') + i)) * freq[i]) return ''.join(ans) def get_word(prev, freq): if len(prev) == 0: return rest(freq) prev_c = prev[0] if freq[letter_id(prev_c)] > 0: freq[letter_id(prev_c)] -= 1 result = get_word(prev[1:], freq) freq[letter_id(prev_c)] += 1 if result is not None: return prev_c + result for i in range(letter_id(prev_c)+1, 26): if freq[i] > 0: freq[i] -= 1 return chr(ord('A') + i) + rest(freq) return None def work_try(x): prev = '' for word in x: freq = [0] * 26 for c in word: freq[letter_id(c)] += 1 new_word = get_word(prev, freq) if new_word is None: return False prev = new_word return True def work(n, x): if n == 2: for i in range(1, len(x)-1): candidate = [x[:i], x[i:]] if not work_try(candidate): return candidate else: for i in range(1, len(x)): for j in range(i+1, len(x)): candidate = [x[:i], x[i:j], x[j:]] if not work_try(candidate): return candidate return None tt = int(input().strip()) for t in range(1, tt+1): ns, bb = input().strip().split() nn = int(ns) ans = work(nn, bb) if ans is None: print('Case #%d: IMPOSSIBLE' % t) else: print('Case #%d: POSSIBLE' % t) print(' '.join(ans))