#include <iostream>
#include <vector>
#include <map>
#include<algorithm>
using namespace std;
int main()
{
int sets, gifts, number;
cin >> sets;
for (int i = 0; i < sets; i++)
{
cin >> gifts;
vector<int> allGifts;
for (int y = 0; y < gifts; y++)
{
cin >> number;
allGifts.push_back(number);
}
map<int, int> countMap;
for (auto& elem : allGifts)
{
auto result = countMap.insert(pair<int, int>(elem, 1));
if (result.second == false)
{
result.first->second++;
}
}
vector<int> toReplace;
for (auto& elem : countMap)
{
if (elem.second > 1)
{
auto found = find(begin(allGifts), end(allGifts), elem.first);
auto position = distance(begin(allGifts), found);
auto position2 = position;
for (int h = 0; h < elem.second - 1; h++)
{
auto found2 = find(allGifts.begin() + position2 + 1, end(allGifts), elem.first);
position2 = distance(begin(allGifts), found2);
toReplace.push_back(position2);
}
}
}
sort(toReplace.begin(), toReplace.end());
for (int j = 0; j < toReplace.size(); j++)
{
int n = 1;
while (n)
{
if (any_of(allGifts.begin(), allGifts.end(), [n](int i) {return i == n; }) == false)
{
break;
}
else
{
n++;
}
}
int where = toReplace[j];
swap(n, allGifts[where]);
}
if (toReplace.empty() == true)
{
cout << "OK" << endl;
}
else
{
for (int n : allGifts)
{
cout << n << " ";
}
cout << endl;
}
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8bWFwPgojaW5jbHVkZTxhbGdvcml0aG0+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgbWFpbigpCnsKCWludCBzZXRzLCBnaWZ0cywgbnVtYmVyOwoKCWNpbiA+PiBzZXRzOwoKCWZvciAoaW50IGkgPSAwOyBpIDwgc2V0czsgaSsrKQoJewoJCWNpbiA+PiBnaWZ0czsKCgkJdmVjdG9yPGludD4gYWxsR2lmdHM7CgoJCWZvciAoaW50IHkgPSAwOyB5IDwgZ2lmdHM7IHkrKykKCQl7CgkJCWNpbiA+PiBudW1iZXI7CgoJCQlhbGxHaWZ0cy5wdXNoX2JhY2sobnVtYmVyKTsKCQl9CgoJCW1hcDxpbnQsIGludD4gY291bnRNYXA7CgoJCWZvciAoYXV0byYgZWxlbSA6IGFsbEdpZnRzKQoJCXsKCQkJYXV0byByZXN1bHQgPSBjb3VudE1hcC5pbnNlcnQocGFpcjxpbnQsIGludD4oZWxlbSwgMSkpOwoKCQkJaWYgKHJlc3VsdC5zZWNvbmQgPT0gZmFsc2UpCgkJCXsKCQkJCXJlc3VsdC5maXJzdC0+c2Vjb25kKys7CgkJCX0KCQl9CgoJCXZlY3RvcjxpbnQ+IHRvUmVwbGFjZTsKCgkJZm9yIChhdXRvJiBlbGVtIDogY291bnRNYXApCgkJewoKCQkJaWYgKGVsZW0uc2Vjb25kID4gMSkKCQkJewoJCQkJCQoJCQkJYXV0byBmb3VuZCA9IGZpbmQoYmVnaW4oYWxsR2lmdHMpLCBlbmQoYWxsR2lmdHMpLCBlbGVtLmZpcnN0KTsKCgkJCQlhdXRvIHBvc2l0aW9uID0gZGlzdGFuY2UoYmVnaW4oYWxsR2lmdHMpLCBmb3VuZCk7CgoJCQkJYXV0byBwb3NpdGlvbjIgPSBwb3NpdGlvbjsKCgoJCQkJZm9yIChpbnQgaCA9IDA7IGggPCBlbGVtLnNlY29uZCAtIDE7IGgrKykKCQkJCXsKCQkJCQlhdXRvIGZvdW5kMiA9IGZpbmQoYWxsR2lmdHMuYmVnaW4oKSArIHBvc2l0aW9uMiArIDEsIGVuZChhbGxHaWZ0cyksIGVsZW0uZmlyc3QpOwoKCQkJCQlwb3NpdGlvbjIgPSBkaXN0YW5jZShiZWdpbihhbGxHaWZ0cyksIGZvdW5kMik7CgoJCQkJCXRvUmVwbGFjZS5wdXNoX2JhY2socG9zaXRpb24yKTsKCgkJCQl9CgoJCQl9CgkJfQoKCQlzb3J0KHRvUmVwbGFjZS5iZWdpbigpLCB0b1JlcGxhY2UuZW5kKCkpOwoKCgkJZm9yIChpbnQgaiA9IDA7IGogPCB0b1JlcGxhY2Uuc2l6ZSgpOyBqKyspCgkJewoJCQlpbnQgbiA9IDE7CgoJCQl3aGlsZSAobikKCQkJewoJCQkJaWYgKGFueV9vZihhbGxHaWZ0cy5iZWdpbigpLCBhbGxHaWZ0cy5lbmQoKSwgW25dKGludCBpKSB7cmV0dXJuIGkgPT0gbjsgfSkgPT0gZmFsc2UpCgkJCQl7CgoJCQkJCWJyZWFrOwoJCQkJfQoJCQkJZWxzZQoJCQkJewoJCQkJCW4rKzsKCQkJCX0KCQkJfQoKCQkJaW50IHdoZXJlID0gdG9SZXBsYWNlW2pdOwoKCQkJc3dhcChuLCBhbGxHaWZ0c1t3aGVyZV0pOwoKCQl9CgoJCWlmICh0b1JlcGxhY2UuZW1wdHkoKSA9PSB0cnVlKQoJCXsKCQkJY291dCA8PCAiT0siIDw8IGVuZGw7CgkJfQoJCWVsc2UKCQl7CgkJCWZvciAoaW50IG4gOiBhbGxHaWZ0cykKCQkJewoJCQkJY291dCA8PCBuIDw8ICIgIjsKCQkJfQoKCQkJY291dCA8PCBlbmRsOwoJCX0KCgl9CglyZXR1cm4gMDsKfQ==