#include <iostream>
#include <map>
#include <vector>
#include <string>
using namespace std;
string zamienNaSlowo( int liczba)
{
static const map < int , string> zapisSlowny {
{ 1 , "jeden" } ,
{ 2 , "dwa" } ,
{ 3 , "trzy" } ,
{ 4 , "cztery" } ,
{ 5 , "piec" } ,
{ 6 , "szesc" } ,
{ 7 , "siedem" } ,
{ 8 , "osiem" } ,
{ 9 , "dziewiec" } ,
{ 10 , "dziesiec" } ,
{ 11 , "jedenascie" } ,
{ 12 , "dwanascie" } ,
{ 13 , "trzynascie" } ,
{ 14 , "czternascie" } ,
{ 15 , "pietnascie" } ,
{ 16 , "szesnascie" } ,
{ 17 , "siedemnascie" } ,
{ 18 , "osiemnascie" } ,
{ 19 , "dziewietnascie" } ,
{ 20 , "dwadziescia" } ,
{ 30 , "trzydziesci" } ,
{ 40 , "czterdziesci" } ,
{ 50 , "piecdziesiat" } ,
{ 60 , "szescdziesiat" } ,
{ 70 , "siedemdziesiat" } ,
{ 80 , "osiemdziesiat" } ,
{ 90 , "dziewiecdziesiat" } ,
{ 100 , "sto" } ,
{ 200 , "dwiescie" } ,
{ 300 , "trzysta" } ,
{ 400 , "czterysta" } ,
{ 500 , "piecset" } ,
{ 600 , "szescset" } ,
{ 700 , "siedemset" } ,
{ 800 , "osiemset" } ,
{ 900 , "dziewiecset" } ,
} ;
string slowo;
auto it = zapisSlowny.find ( liczba) ;
if ( it ! = zapisSlowny.end ( ) )
{
slowo = it- > second;
}
return slowo;
}
void zamienLiczbeTrzycyfrowaNaSlowo( int liczbaTrzycyfrowa)
{
int tymczasowa1, tymczasowa2 = 0 ;
tymczasowa1 = liczbaTrzycyfrowa % 100 ;
tymczasowa2 = liczbaTrzycyfrowa % 10 ;
liczbaTrzycyfrowa = liczbaTrzycyfrowa - tymczasowa1;
if ( zamienNaSlowo( liczbaTrzycyfrowa) ! = " " )
cout << zamienNaSlowo( liczbaTrzycyfrowa) << " " ;
if ( tymczasowa1 < 20 )
cout << zamienNaSlowo( tymczasowa1) ;
else
{
tymczasowa2 = tymczasowa1 % 10 ;
tymczasowa1 = tymczasowa1 - tymczasowa2;
if ( zamienNaSlowo( tymczasowa1) ! = " " )
cout << zamienNaSlowo( tymczasowa1) << " " ;
cout << zamienNaSlowo( tymczasowa2) ;
}
}
vector < string> podzielStringNaCiagiTrzycyfrowe ( string & liczba)
{
const int dlugoscPodciagu = 3 ;
int dlugoscLiczby = liczba.length ( ) ;
int liczbaPodciagow = dlugoscLiczby / dlugoscPodciagu;
vector < string> wektorCiagowTrzycyfrowych;
for ( int i= liczbaPodciagow- 1 ; i>= 0 ; i-- )
{
wektorCiagowTrzycyfrowych.push_back ( liczba.substr ( i* dlugoscPodciagu + dlugoscLiczby% dlugoscPodciagu, dlugoscPodciagu) ) ;
}
if ( dlugoscLiczby % dlugoscPodciagu ! = 0 )
wektorCiagowTrzycyfrowych.push_back ( liczba.substr ( 0 ,dlugoscLiczby% dlugoscPodciagu) ) ;
return wektorCiagowTrzycyfrowych;
}
vector < int > zamienCiagiZnakowNaLiczby ( vector< string> & wektorCiagowTrzycyfrowych)
{
vector < int > wektorLiczbTrzycyfrowych;
int dlugoscWektora = wektorCiagowTrzycyfrowych.size ( ) ;
for ( int i= 0 ; i< dlugoscWektora; i++ )
wektorLiczbTrzycyfrowych.push_back ( stoi( wektorCiagowTrzycyfrowych [ i] ) ) ;
return wektorLiczbTrzycyfrowych;
}
void zamienWektorNaZapisSlowny ( vector < int > & wektorLiczbTrzycyfrowych)
{
int dlugoscWektora = wektorLiczbTrzycyfrowych.size ( ) ;
string rzadWielkosci [ 5 ] = { " " ,"tys. " ,"mln. " ,"mld. " ,"bln. " } ;
for ( int i= dlugoscWektora- 1 ; i>= 0 ; i-- )
{
zamienLiczbeTrzycyfrowaNaSlowo ( wektorLiczbTrzycyfrowych[ i] ) ;
cout << " " << rzadWielkosci [ i] ;
}
cout << endl;
}
int main( )
{
int liczbaTestow;
string liczba;
cin >> liczbaTestow;
for ( int i= 0 ; i< liczbaTestow; i++ )
{
cin >> liczba;
vector < string> wektorCiagowTrzycyfrowych = podzielStringNaCiagiTrzycyfrowe( liczba) ;
vector < int > wektorLiczbTrzycyfrowych = zamienCiagiZnakowNaLiczby( wektorCiagowTrzycyfrowych) ;
zamienWektorNaZapisSlowny ( wektorLiczbTrzycyfrowych) ;
}
return 0 ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWFwPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8c3RyaW5nPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnN0cmluZyB6YW1pZW5OYVNsb3dvKGludCBsaWN6YmEpCnsKICAgIHN0YXRpYyBjb25zdCBtYXAgPGludCwgc3RyaW5nPiB6YXBpc1Nsb3dueSB7CiAgICAgICAgeyAxLCAiamVkZW4iIH0sCiAgICAgICAgeyAyLCAiZHdhIiB9LAogICAgICAgIHsgMywgInRyenkiIH0sCiAgICAgICAgeyA0LCAiY3p0ZXJ5IiB9LAogICAgICAgIHsgNSwgInBpZWMiIH0sCiAgICAgICAgeyA2LCAic3plc2MiIH0sCiAgICAgICAgeyA3LCAic2llZGVtIiB9LAogICAgICAgIHsgOCwgIm9zaWVtIiB9LAogICAgICAgIHsgOSwgImR6aWV3aWVjIiB9LAogICAgICAgIHsgMTAsICJkemllc2llYyIgfSwKICAgICAgICB7IDExLCAiamVkZW5hc2NpZSIgfSwKICAgICAgICB7IDEyLCAiZHdhbmFzY2llIiB9LAogICAgICAgIHsgMTMsICJ0cnp5bmFzY2llIiB9LAogICAgICAgIHsgMTQsICJjenRlcm5hc2NpZSIgfSwKICAgICAgICB7IDE1LCAicGlldG5hc2NpZSIgfSwKICAgICAgICB7IDE2LCAic3plc25hc2NpZSIgfSwKICAgICAgICB7IDE3LCAic2llZGVtbmFzY2llIiB9LAogICAgICAgIHsgMTgsICJvc2llbW5hc2NpZSIgfSwKICAgICAgICB7IDE5LCAiZHppZXdpZXRuYXNjaWUiIH0sCiAgICAgICAgeyAyMCwgImR3YWR6aWVzY2lhIiB9LAogICAgICAgIHsgMzAsICJ0cnp5ZHppZXNjaSIgfSwKICAgICAgICB7IDQwLCAiY3p0ZXJkemllc2NpIiB9LAogICAgICAgIHsgNTAsICJwaWVjZHppZXNpYXQiIH0sCiAgICAgICAgeyA2MCwgInN6ZXNjZHppZXNpYXQiIH0sCiAgICAgICAgeyA3MCwgInNpZWRlbWR6aWVzaWF0IiB9LAogICAgICAgIHsgODAsICJvc2llbWR6aWVzaWF0IiB9LAogICAgICAgIHsgOTAsICJkemlld2llY2R6aWVzaWF0IiB9LAogICAgICAgIHsgMTAwLCAic3RvIiB9LAogICAgICAgIHsgMjAwLCAiZHdpZXNjaWUiIH0sCiAgICAgICAgeyAzMDAsICJ0cnp5c3RhIiB9LAogICAgICAgIHsgNDAwLCAiY3p0ZXJ5c3RhIiB9LAogICAgICAgIHsgNTAwLCAicGllY3NldCIgfSwKICAgICAgICB7IDYwMCwgInN6ZXNjc2V0IiB9LAogICAgICAgIHsgNzAwLCAic2llZGVtc2V0IiB9LAogICAgICAgIHsgODAwLCAib3NpZW1zZXQiIH0sCiAgICAgICAgeyA5MDAsICJkemlld2llY3NldCIgfSwKICAgIH07CgogICAgc3RyaW5nIHNsb3dvOwogICAgYXV0byBpdCA9IHphcGlzU2xvd255LmZpbmQobGljemJhKTsKCiAgICBpZiAoaXQgIT0gemFwaXNTbG93bnkuZW5kKCkpCiAgICB7CiAgICAgICAgc2xvd28gPSBpdC0+c2Vjb25kOwogICAgfQogICAgcmV0dXJuIHNsb3dvOwp9Cgp2b2lkIHphbWllbkxpY3piZVRyenljeWZyb3dhTmFTbG93byhpbnQgbGljemJhVHJ6eWN5ZnJvd2EpCnsKICAgIGludCB0eW1jemFzb3dhMSwgdHltY3phc293YTIgPSAwOwogICAgdHltY3phc293YTEgPSBsaWN6YmFUcnp5Y3lmcm93YSAlIDEwMDsKICAgIHR5bWN6YXNvd2EyID0gbGljemJhVHJ6eWN5ZnJvd2EgJSAxMDsKICAgIGxpY3piYVRyenljeWZyb3dhID0gbGljemJhVHJ6eWN5ZnJvd2EgLSB0eW1jemFzb3dhMTsKCiAgICBpZiAoemFtaWVuTmFTbG93byhsaWN6YmFUcnp5Y3lmcm93YSkgIT0gIiAiKQogICAgICAgIGNvdXQgPDwgemFtaWVuTmFTbG93byhsaWN6YmFUcnp5Y3lmcm93YSkgPDwgIiAiOwoKICAgIGlmICh0eW1jemFzb3dhMSA8IDIwKQogICAgICAgIGNvdXQgPDwgemFtaWVuTmFTbG93byh0eW1jemFzb3dhMSk7CiAgICBlbHNlCiAgICB7CiAgICAgICAgdHltY3phc293YTIgPSB0eW1jemFzb3dhMSAlIDEwOwogICAgICAgIHR5bWN6YXNvd2ExID0gdHltY3phc293YTEgLSB0eW1jemFzb3dhMjsKCiAgICAgICAgaWYgKHphbWllbk5hU2xvd28odHltY3phc293YTEpICE9ICIgIikKICAgICAgICAgICAgY291dCA8PCB6YW1pZW5OYVNsb3dvKHR5bWN6YXNvd2ExKSA8PCAiICI7CgogICAgICAgIGNvdXQgPDwgemFtaWVuTmFTbG93byh0eW1jemFzb3dhMik7CiAgICB9Cn0KCnZlY3RvciA8c3RyaW5nPiBwb2R6aWVsU3RyaW5nTmFDaWFnaVRyenljeWZyb3dlIChzdHJpbmcgJmxpY3piYSkKewogICAgY29uc3QgaW50IGRsdWdvc2NQb2RjaWFndSA9IDM7CiAgICBpbnQgZGx1Z29zY0xpY3pieSA9IGxpY3piYS5sZW5ndGgoKTsKICAgIGludCBsaWN6YmFQb2RjaWFnb3cgPSBkbHVnb3NjTGljemJ5IC8gZGx1Z29zY1BvZGNpYWd1OwoKICAgIHZlY3RvciA8c3RyaW5nPiB3ZWt0b3JDaWFnb3dUcnp5Y3lmcm93eWNoOwoKICAgIGZvciAoaW50IGk9bGljemJhUG9kY2lhZ293LTE7IGk+PTA7IGktLSkKICAgIHsKICAgICAgICB3ZWt0b3JDaWFnb3dUcnp5Y3lmcm93eWNoLnB1c2hfYmFjayhsaWN6YmEuc3Vic3RyKGkqZGx1Z29zY1BvZGNpYWd1ICsgZGx1Z29zY0xpY3pieSVkbHVnb3NjUG9kY2lhZ3UsIGRsdWdvc2NQb2RjaWFndSkpOwogICAgfQoKICAgIGlmIChkbHVnb3NjTGljemJ5ICUgZGx1Z29zY1BvZGNpYWd1ICE9IDApCiAgICAgICAgd2VrdG9yQ2lhZ293VHJ6eWN5ZnJvd3ljaC5wdXNoX2JhY2sobGljemJhLnN1YnN0cigwLGRsdWdvc2NMaWN6YnklZGx1Z29zY1BvZGNpYWd1KSk7CgogICAgcmV0dXJuIHdla3RvckNpYWdvd1RyenljeWZyb3d5Y2g7Cn0KCnZlY3RvciA8aW50PiB6YW1pZW5DaWFnaVpuYWtvd05hTGljemJ5ICh2ZWN0b3I8c3RyaW5nPiAmd2VrdG9yQ2lhZ293VHJ6eWN5ZnJvd3ljaCkKewogICAgdmVjdG9yIDxpbnQ+IHdla3RvckxpY3piVHJ6eWN5ZnJvd3ljaDsKICAgIGludCBkbHVnb3NjV2VrdG9yYSA9IHdla3RvckNpYWdvd1RyenljeWZyb3d5Y2guc2l6ZSgpOwoKICAgIGZvciAoaW50IGk9MDsgaTxkbHVnb3NjV2VrdG9yYTsgaSsrKQogICAgICAgIHdla3RvckxpY3piVHJ6eWN5ZnJvd3ljaC5wdXNoX2JhY2soc3RvaSh3ZWt0b3JDaWFnb3dUcnp5Y3lmcm93eWNoIFtpXSkpOwoKICAgIHJldHVybiB3ZWt0b3JMaWN6YlRyenljeWZyb3d5Y2g7Cn0KCnZvaWQgemFtaWVuV2VrdG9yTmFaYXBpc1Nsb3dueSAodmVjdG9yIDxpbnQ+ICZ3ZWt0b3JMaWN6YlRyenljeWZyb3d5Y2gpCnsKICAgIGludCBkbHVnb3NjV2VrdG9yYSA9IHdla3RvckxpY3piVHJ6eWN5ZnJvd3ljaC5zaXplKCk7CiAgICBzdHJpbmcgcnphZFdpZWxrb3NjaSBbNV0gPSB7IiAiLCJ0eXMuICIsIm1sbi4gIiwibWxkLiAiLCJibG4uICJ9OwoKICAgIGZvciAoaW50IGk9ZGx1Z29zY1dla3RvcmEtMTsgaT49MDsgaS0tKQogICAgewogICAgICAgIHphbWllbkxpY3piZVRyenljeWZyb3dhTmFTbG93byAod2VrdG9yTGljemJUcnp5Y3lmcm93eWNoW2ldKTsKICAgICAgICBjb3V0IDw8ICIgIiA8PCByemFkV2llbGtvc2NpIFtpXTsKICAgIH0KICAgIGNvdXQgPDwgZW5kbDsKfQoKaW50IG1haW4oKQp7CiAgICBpbnQgbGljemJhVGVzdG93OwogICAgc3RyaW5nIGxpY3piYTsKCiAgICBjaW4gPj4gbGljemJhVGVzdG93OwoKICAgIGZvciAoaW50IGk9MDsgaTxsaWN6YmFUZXN0b3c7IGkrKykKICAgIHsKICAgICAgICBjaW4gPj4gbGljemJhOwoKICAgICAgICB2ZWN0b3IgPHN0cmluZz4gd2VrdG9yQ2lhZ293VHJ6eWN5ZnJvd3ljaCA9IHBvZHppZWxTdHJpbmdOYUNpYWdpVHJ6eWN5ZnJvd2UobGljemJhKTsKICAgICAgICB2ZWN0b3IgPGludD4gd2VrdG9yTGljemJUcnp5Y3lmcm93eWNoID0gemFtaWVuQ2lhZ2labmFrb3dOYUxpY3pieSh3ZWt0b3JDaWFnb3dUcnp5Y3lmcm93eWNoKTsKICAgICAgICB6YW1pZW5XZWt0b3JOYVphcGlzU2xvd255ICh3ZWt0b3JMaWN6YlRyenljeWZyb3d5Y2gpOwogICAgfQogICAgcmV0dXJuIDA7Cn0K