#include <iostream>
#include <sstream>
#include <vector>
#include <cctype>
using namespace std;
string convertName(const string &name) {
stringstream ss(name);
vector<string> words;
string word;
while (ss >> word) {
words.push_back(word);
}
if (words.size() < 2) return name; // Trả về nguyên gốc nếu không đủ phần họ và tên
string lastName = words[0];
for (char &c : lastName) c = toupper(c); // Viết hoa họ
string fullName = "";
for (size_t i = 1; i < words.size(); i++) {
words[i][0] = toupper(words[i][0]);
for (size_t j = 1; j < words[i].size(); j++) {
words[i][j] = tolower(words[i][j]);
}
fullName += words[i] + " ";
}
fullName.pop_back(); // Xóa khoảng trắng cuối cùng
return fullName + ", " + lastName;
}
int main() {
int N;
cin >> N;
cin.ignore(); // Loại bỏ ký tự xuống dòng sau khi nhập số
while (N--) {
string name;
getline(cin, name);
cout << convertName(name) << endl;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3N0cmVhbT4KI2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPGNjdHlwZT4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnN0cmluZyBjb252ZXJ0TmFtZShjb25zdCBzdHJpbmcgJm5hbWUpIHsKICAgIHN0cmluZ3N0cmVhbSBzcyhuYW1lKTsKICAgIHZlY3RvcjxzdHJpbmc+IHdvcmRzOwogICAgc3RyaW5nIHdvcmQ7CiAgICAKICAgIHdoaWxlIChzcyA+PiB3b3JkKSB7CiAgICAgICAgd29yZHMucHVzaF9iYWNrKHdvcmQpOwogICAgfQogICAgCiAgICBpZiAod29yZHMuc2l6ZSgpIDwgMikgcmV0dXJuIG5hbWU7IC8vIFRy4bqjIHbhu4Egbmd1ecOqbiBn4buRYyBu4bq/dSBraMO0bmcgxJHhu6cgcGjhuqduIGjhu40gdsOgIHTDqm4KICAgIAogICAgc3RyaW5nIGxhc3ROYW1lID0gd29yZHNbMF07CiAgICBmb3IgKGNoYXIgJmMgOiBsYXN0TmFtZSkgYyA9IHRvdXBwZXIoYyk7IC8vIFZp4bq/dCBob2EgaOG7jQogICAgCiAgICBzdHJpbmcgZnVsbE5hbWUgPSAiIjsKICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgd29yZHMuc2l6ZSgpOyBpKyspIHsKICAgICAgICB3b3Jkc1tpXVswXSA9IHRvdXBwZXIod29yZHNbaV1bMF0pOwogICAgICAgIGZvciAoc2l6ZV90IGogPSAxOyBqIDwgd29yZHNbaV0uc2l6ZSgpOyBqKyspIHsKICAgICAgICAgICAgd29yZHNbaV1bal0gPSB0b2xvd2VyKHdvcmRzW2ldW2pdKTsKICAgICAgICB9CiAgICAgICAgZnVsbE5hbWUgKz0gd29yZHNbaV0gKyAiICI7CiAgICB9CiAgICAKICAgIGZ1bGxOYW1lLnBvcF9iYWNrKCk7IC8vIFjDs2Ega2hv4bqjbmcgdHLhuq9uZyBjdeG7kWkgY8O5bmcKICAgIHJldHVybiBmdWxsTmFtZSArICIsICIgKyBsYXN0TmFtZTsKfQoKaW50IG1haW4oKSB7CiAgICBpbnQgTjsKICAgIGNpbiA+PiBOOwogICAgY2luLmlnbm9yZSgpOyAvLyBMb+G6oWkgYuG7jyBrw70gdOG7sSB4deG7kW5nIGTDsm5nIHNhdSBraGkgbmjhuq1wIHPhu5EKICAgIAogICAgd2hpbGUgKE4tLSkgewogICAgICAgIHN0cmluZyBuYW1lOwogICAgICAgIGdldGxpbmUoY2luLCBuYW1lKTsKICAgICAgICBjb3V0IDw8IGNvbnZlcnROYW1lKG5hbWUpIDw8IGVuZGw7CiAgICB9CiAgICAKICAgIHJldHVybiAwOwp9