#include #include #include #include using namespace std; const string IMPOSSIBLE = "IMPOSSIBLE"; void solve(int t) { int n; cin >> n; vector colors(n); for (int i = 0; i < n; i++) { cin >> colors[i]; } map max_seen; vector nums(n); int next_num = 1; for (int i = 0; i < n; i++) { int color = colors[i]; if (max_seen.find(color) == max_seen.end()) { // New color, assign a new number nums[i] = next_num; next_num++; } else { // Seen color, assign same number as before nums[i] = max_seen[color]; } max_seen[color] = nums[i]; } bool possible = true; for (int i = 1; i < n; i++) { if (nums[i] < nums[i-1]) { possible = false; break; } } cout << "Case #" << t << ": "; if (possible) { map color_order; for (int i = 0; i < n; i++) { color_order[nums[i]] = colors[i]; } for (auto it : color_order) { cout << it.second << " "; } cout << endl; } else { cout << IMPOSSIBLE << endl; } } int main() { int T; cin >> T; for (int t = 1; t <= T; t++) { solve(t); } return 0; }