#include <iostream>
#include <stdexcept>
#include <string>
#include <sstream>
#include <limits>
#include <map>
struct Customer
{
double X;
double Y;
explicit Customer(double X = 0., double Y = 0.)
: X(X), Y(Y)
{
}
};
template<typename CharT>
std::basic_istream<CharT>& operator>> (std::basic_istream<CharT>& Stream, Customer& Object)
{
if(!(Stream >> Object.X) || !(Stream >> Object.Y))
{
throw std::invalid_argument(std::string("Couldn't parse input"));
}
return Stream;
}
template<typename CharT, typename Traits>
std::basic_ostream<CharT, Traits>& operator<< (std::basic_ostream<CharT, Traits>& Stream, Customer const& Object)
{
::std::basic_ostringstream<CharT, Traits> StrStream;
StrStream.flags(Stream.flags());
StrStream.imbue(Stream.getloc());
StrStream.precision(Stream.precision());
StrStream << Object.X << '\t' << Object.Y;
return Stream << StrStream.str();
}
int main()
{
std::istream& Source = std::cin;
Source.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
typedef std::map<unsigned, Customer> ListType;
ListType List;
{
unsigned Nr;
Customer InputCustomer;
try
{
while((Source >> Nr) && (Source >> InputCustomer))
{
List[Nr] = InputCustomer;
}
}
catch(std::invalid_argument const& Exception)
{
std::cerr << Exception.what();
return -1;
}
}
std::cout << "Nr.\tX\tY\n";
for(ListType::const_iterator i = List.begin(); i != List.end(); ++i)
{
std::cout << i->first << '\t' << i->second << '\n';
}
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RkZXhjZXB0PgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8c3N0cmVhbT4KI2luY2x1ZGUgPGxpbWl0cz4KI2luY2x1ZGUgPG1hcD4Kc3RydWN0IEN1c3RvbWVyCnsKICAgIGRvdWJsZSBYOwoJZG91YmxlIFk7CglleHBsaWNpdCBDdXN0b21lcihkb3VibGUgWCA9IDAuLCBkb3VibGUgWSA9IDAuKQoJCTogWChYKSwgWShZKQoJewoJfQp9Owp0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyVD4Kc3RkOjpiYXNpY19pc3RyZWFtPENoYXJUPiYgb3BlcmF0b3I+PiAoc3RkOjpiYXNpY19pc3RyZWFtPENoYXJUPiYgU3RyZWFtLCBDdXN0b21lciYgT2JqZWN0KQp7CglpZighKFN0cmVhbSA+PiBPYmplY3QuWCkgfHwgIShTdHJlYW0gPj4gT2JqZWN0LlkpKQoJewoJCXRocm93IHN0ZDo6aW52YWxpZF9hcmd1bWVudChzdGQ6OnN0cmluZygiQ291bGRuJ3QgcGFyc2UgaW5wdXQiKSk7Cgl9CglyZXR1cm4gU3RyZWFtOwp9CnRlbXBsYXRlPHR5cGVuYW1lIENoYXJULCB0eXBlbmFtZSBUcmFpdHM+CnN0ZDo6YmFzaWNfb3N0cmVhbTxDaGFyVCwgVHJhaXRzPiYgb3BlcmF0b3I8PCAoc3RkOjpiYXNpY19vc3RyZWFtPENoYXJULCBUcmFpdHM+JiBTdHJlYW0sIEN1c3RvbWVyIGNvbnN0JiBPYmplY3QpCnsKCTo6c3RkOjpiYXNpY19vc3RyaW5nc3RyZWFtPENoYXJULCBUcmFpdHM+IFN0clN0cmVhbTsKCVN0clN0cmVhbS5mbGFncyhTdHJlYW0uZmxhZ3MoKSk7CglTdHJTdHJlYW0uaW1idWUoU3RyZWFtLmdldGxvYygpKTsKCVN0clN0cmVhbS5wcmVjaXNpb24oU3RyZWFtLnByZWNpc2lvbigpKTsKCQoJU3RyU3RyZWFtIDw8IE9iamVjdC5YIDw8ICdcdCcgPDwgT2JqZWN0Llk7CgkKCXJldHVybiBTdHJlYW0gPDwgU3RyU3RyZWFtLnN0cigpOwp9CmludCBtYWluKCkKewogICAgc3RkOjppc3RyZWFtJiBTb3VyY2UgPSBzdGQ6OmNpbjsKCVNvdXJjZS5pZ25vcmUoc3RkOjpudW1lcmljX2xpbWl0czxzdGQ6OnN0cmVhbXNpemU+OjptYXgoKSwgJ1xuJyk7Cgl0eXBlZGVmIHN0ZDo6bWFwPHVuc2lnbmVkLCBDdXN0b21lcj4gTGlzdFR5cGU7CglMaXN0VHlwZSBMaXN0OwoJewoJCXVuc2lnbmVkIE5yOwoJCUN1c3RvbWVyIElucHV0Q3VzdG9tZXI7CgkJdHJ5CgkJewoJCQl3aGlsZSgoU291cmNlID4+IE5yKSAmJiAoU291cmNlID4+IElucHV0Q3VzdG9tZXIpKQoJCQl7CgkJCQlMaXN0W05yXSA9IElucHV0Q3VzdG9tZXI7CgkJCX0KCQl9CgkJY2F0Y2goc3RkOjppbnZhbGlkX2FyZ3VtZW50IGNvbnN0JiBFeGNlcHRpb24pCgkJewoJCQlzdGQ6OmNlcnIgPDwgRXhjZXB0aW9uLndoYXQoKTsKCQkJcmV0dXJuIC0xOwoJCX0KCX0KCXN0ZDo6Y291dCA8PCAiTnIuXHRYXHRZXG4iOwoJZm9yKExpc3RUeXBlOjpjb25zdF9pdGVyYXRvciBpID0gTGlzdC5iZWdpbigpOyBpICE9IExpc3QuZW5kKCk7ICsraSkKCXsKCQlzdGQ6OmNvdXQgPDwgaS0+Zmlyc3QgPDwgJ1x0JyA8PCBpLT5zZWNvbmQgPDwgJ1xuJzsKCX0KfQ==
bnIuIFggICBZIAoxICAgOTEgIDUgCjIgICA1NiAgNzcgCjMgICA3OSAgODkgCjQgICAxMiAgNDYgCjUgICA5NyAgMjIgCjYgICA5MCAgOSAKNyAgIDgwICAzMCAKOCAgIDYyICAyNiAKOSAgIDUgICA0NSAKMTAgIDMyICAzNg==
nr. X Y
1 91 5
2 56 77
3 79 89
4 12 46
5 97 22
6 90 9
7 80 30
8 62 26
9 5 45
10 32 36