#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace std;
using namespace __gnu_pbds;
#define fastio() ios::sync_with_stdio(0); cin.tie(0);
#define nl "\n"
#define sep " "
#define ff first
#define ss second
#define pb push_back
#define eb emplace_back
#define mp make_pair
#define mt make_tuple
#define FOR(i,begin,end) for(auto i=(begin)-((begin)>(end));i!=(end)-((begin)>(end));i+=1-2*((begin)>(end)))
#define scan(arr,n) FOR(scan_idx,0,n)cin>>arr[scan_idx];
#define inp(v,n) int n;cin>>n;vi v(n);scan(v,n)
#define inpl(v,n) ll n;cin>>n;vl v(n);scan(v,n)
#define setbits(x) __builtin_popcountll(x)
#define all(v) v.begin(),v.end()
#define rall(v) v.rbegin(),v.rend()
#define present(ab,cd) ((ab).find((cd)) != (ab).end())
#define acc accumulate
//debug template starts
void __print(int x) {cerr << x;}
void __print(long x) {cerr << x;}
void __print(long long x) {cerr << x;}
void __print(unsigned x) {cerr << x;}
void __print(unsigned long x) {cerr << x;}
void __print(unsigned long long x) {cerr << x;}
void __print(float x) {cerr << x;}
void __print(double x) {cerr << x;}
void __print(long double x) {cerr << x;}
void __print(char x) {cerr << '\'' << x << '\'';}
void __print(const char *x) {cerr << '"' << x << '"';}
void __print(const string &x) {cerr << '"' << x << '"';}
void __print(bool x) {cerr << (x ? "true" : "false");}
template<typename T, typename V>
void __print(const pair<T, V> &x) {cerr << '{'; __print(x.first); cerr << ','; __print(x.second); cerr << '}';}
template<typename T>
void __print(const T &x) {int f = 0; cerr << '{'; for (auto &i: x) cerr << (f++ ? "," : ""), __print(i); cerr << "}";}
void _print() {cerr << "]\n";}
template <typename T, typename... V>
void _print(T t, V... v) {__print(t); if (sizeof...(v)) cerr << ", "; _print(v...);}
#ifndef ONLINEJUDGE
#define debug(x...) cerr << "[" << #x << "] = ["; _print(x)
#else
#define debug(x...)
#endif
//debug template ends
#define YES(); {cout<<"YES"<<nl;return;}
#define Yes(); {cout<<"Yes"<<nl;return;}
#define NO(); {cout<<"NO"<<nl;return;}
#define No(); {cout<<"No"<<nl;return;}
//using ulli = unsigned long long int;
using ll = long long;
using lld = long double;
typedef vector<int> vi;
typedef vector<ll> vl;
typedef vector<double> vd;
typedef vector<bool> vb;
typedef vector<string> vs;
typedef pair<int, int> pii;
typedef pair<char, char> pcc;
typedef pair<ll, ll> pll;
typedef vector<vi> vvi;
typedef vector<vl> vvl;
typedef vector<pii> vpii;
typedef vector<pll> vpll;
typedef pair<string, string> pss;
typedef tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update> i_set;//indexed_set
//member functions :
//1. order_of_key(k) : number of elements strictly lesser than k
//2. find_by_order(k) : k-th element in the set
lld pi = 3.1415926535897932;
ll MOD = (1000)*(1000)*(1000) + 7;
inline int mod(ll a){
int b = a%MOD;
if(b<0)b += MOD;
return b;
}
//remove debug statements
//#define debug if(false)debug
//check tips if stuck
void testcase(){
//input
string s;cin>>s;
int n = s.size();
// making two strings, can be done with one string also, as
//we can match 0th character with N/2th character and so on
string p = s;
sort(all(p));
string q = p;
//rotating string q by N/2
// this is trick to rotate in On
reverse(q.begin(),q.begin() + n/2);
reverse(q.begin() + n/2,q.end());
reverse(all(q));
//making a multiset to store matching pairs where p[i] and q[i] are different
multimap<char,char> st;
FOR(i,0,n){
if(p[i] == q[i]){
//this will happen only when some character has frequency > N/2
//which will lead to p[i] and q[i] being equal
cout<<"IMPOSSIBLE\n";
return;
}
//storing matching pairs
st.insert(mp(p[i],q[i]));
}
//constructing the anagram
string ans = "";
FOR(i,0,n){
char x = st.find(s[i])->ss;
ans += x;
st.erase(st.find(s[i]));
}
cout<<ans<<nl;
}
int32_t main() {
//comment it while solving interactive
fastio();
cout<<fixed<<setprecision(10);
int t=1;
int i = 1;
cin>>t;
while(t--){
cout<<"Case #"<<i<<": ";
testcase();
i++;
}
}
/*
Coded by : Dip Turkar
{TIPS WHILE STARTING}
--use find and rfind more
--figure out logic first, then start writing pls!!!!!!!
--check for long long overflows
--using a set? check for PBDS!!!
--modulo of negative numbers is not a%b, it is a%b + abs(b)!!!!!!!
--lower_bound and set.lower_bound are different, use it wisely
--string .append() or += is O1, but s = s + s is On, use wisely
--check if you have to input t or not
*/