#include <iostream>
#include <map>
#include <sstream>
#include <vector>
using namespace std;
void dwojki(string number)
{
map<string, string> numberToWord;
numberToWord["1"] = "jeden";
numberToWord["2"] = "dwa";
numberToWord["3"] = "trzy";
numberToWord["4"] = "cztery";
numberToWord["5"] = "piec";
numberToWord["6"] = "szesc";
numberToWord["7"] = "siedem";
numberToWord["8"] = "osiem";
numberToWord["9"] = "dziewiec";
numberToWord["10"] = "dziesiec";
numberToWord["11"] = "jedenascie";
numberToWord["12"] = "dwanascie";
numberToWord["13"] = "trzynascie";
numberToWord["14"] = "czternascie";
numberToWord["15"] = "pietnascie";
numberToWord["16"] = "szesnascie";
numberToWord["17"] = "siedemnascie";
numberToWord["18"] = "osiemnascie";
numberToWord["19"] = "dziewietnascie";
map<char, string> digitToWord;
digitToWord['1'] = "jeden";
digitToWord['2'] = "dwa";
digitToWord['3'] = "trzy";
digitToWord['4'] = "cztery";
digitToWord['5'] = "piec";
digitToWord['6'] = "szesc";
digitToWord['7'] = "siedem";
digitToWord['8'] = "osiem";
digitToWord['9'] = "dziewiec";
map<string, string>::iterator itr = numberToWord.find(number);
map<char, string>::iterator itr2 = digitToWord.find(number[ number.length() - 1 ]);
if (itr -> first == number)
cout << itr -> second;
if (number.length() == 2)
{
if (number[0] == '0')
cout << itr2 -> second;
if (number[0] == '2')
cout << "dwadziescia";
if (number[0] == '3')
cout << "trzydziesci";
if (number[0] == '4')
cout << "czterdziesci";
if (number[0] == '5')
cout << "piecdziesiat";
if (number[0] == '6')
cout << "szescdziesiat";
if (number[0] == '7')
cout << "siedemdziesiat";
if (number[0] == '8')
cout << "osiemdziesiat";
if (number[0] == '9')
cout << "dziewiecdziesiat";
if (number[1] >= '1' && number[1] <= '9' && number[ number.length() - 2 ] != '0' && number[ number.length() - 2 ] != '1')
{
cout << " " << itr2 -> second;
}
}
}
void trojki(string number)
{
string numberWithoutFirstDigit = number.substr(1,2);
if (number[ number.length() - 3 ] == '1')
cout << "sto";
if (number[ number.length() - 3 ] == '2')
cout << "dwiescie";
if (number[ number.length() - 3 ] == '3')
cout << "trzysta";
if (number[ number.length() - 3 ] == '4')
cout << "czterysta";
if (number[ number.length() - 3 ] == '5')
cout << "piecset";
if (number[ number.length() - 3 ] == '6')
cout << "szescset";
if (number[ number.length() - 3 ] == '7')
cout << "siedemset";
if (number[ number.length() - 3 ] == '8')
cout << "osiemset";
if (number[ number.length() - 3 ] == '9')
cout << "dziewiecset";
if (number[1] >= '0' && number[1] <= '9' && number[0]!= '0' && (number[1] != '0' || number[2] != '0'))
{
cout << " ";
}
dwojki(numberWithoutFirstDigit);
}
int main()
{
string number;
int tests;
string koncowki[6] = {"","","tys.","mln.","mld.","bln."};
cin >> tests;
for(int i = 1; i <= tests; i++)
{
cin >> number;
if (number.length() > 3)
{
vector<string> splitedNumbers;
for(int i = number.length(); i > 0; i -= 3)
{
number.insert(i," ");
}
istringstream splitingNumber(number);
string numberLessOrEqualToThree;
while (getline(splitingNumber, numberLessOrEqualToThree, ' '))
{
splitedNumbers.push_back(numberLessOrEqualToThree);
}
for(int j = 0; j<splitedNumbers.size();j++)
{
if (splitedNumbers[j].length() == 3)
{
trojki(splitedNumbers[j]);
}
if (splitedNumbers[j].length() <= 2)
{
dwojki(splitedNumbers[j]);
}
if (splitedNumbers[j] != "000" && splitedNumbers[j] != "00" && splitedNumbers[j] != "0")
cout << " " << koncowki[splitedNumbers.size()-j] << " ";
}
}
if (number.length() <= 2)
{
dwojki(number);
}
if (number.length() == 3)
{
trojki(number);
}
cout << endl;
}
return 0;
}