- #include <iostream> 
- #include <string> 
- #include <vector> 
- #include <stdexcept> 
-   
- struct itemInfo 
- { 
-     int quantity; 
-     std::string name; 
-     double price; 
- }; 
-   
- std::istream& operator>>(std::istream &in, itemInfo &item) 
- { 
-     try 
-     { 
-         std::string line; 
-   
-         if (std::getline(in, line)) 
-         { 
-             auto start = line.find_first_not_of(" \t"); 
-             auto stop = line.find_first_of(" \t", start + 1); 
-             item.quantity = std::stoi(line.substr(start, stop - start)); 
-   
-             start = line.find_first_not_of(" \t", stop + 1); 
-             stop = line.find(" at ", start); 
-             item.name = line.substr(start, stop - start); 
-   
-             start = line.find_first_not_of(" \t", stop + 4); 
-             item.price = std::stod(line.substr(start)); 
-         } 
-     } 
-     catch (const std::logic_error &) 
-     { 
-         in.setstate(std::ios_base::failbit);  
-     } 
-   
-     return in; 
- } 
-   
- int main() 
- { 
-     itemInfo item; 
- 	std::vector<itemInfo> items; 
-   
-     while (std::cin >> item) 
-     {  
-         items.push_back(item); 
-     } 
-   
-     // use items as needed... 
-   
-     for(auto &item : items) 
-     { 
-     	std::cout << item.name << ": " << item.quantity << " @ " << item.price << std::endl; 
-     } 
-   
-     return 0; 
- } 
				I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8c3RkZXhjZXB0PgoKc3RydWN0IGl0ZW1JbmZvCnsKICAgIGludCBxdWFudGl0eTsKICAgIHN0ZDo6c3RyaW5nIG5hbWU7CiAgICBkb3VibGUgcHJpY2U7Cn07CgpzdGQ6OmlzdHJlYW0mIG9wZXJhdG9yPj4oc3RkOjppc3RyZWFtICZpbiwgaXRlbUluZm8gJml0ZW0pCnsKICAgIHRyeQogICAgewogICAgICAgIHN0ZDo6c3RyaW5nIGxpbmU7CgogICAgICAgIGlmIChzdGQ6OmdldGxpbmUoaW4sIGxpbmUpKQogICAgICAgIHsKICAgICAgICAgICAgYXV0byBzdGFydCA9IGxpbmUuZmluZF9maXJzdF9ub3Rfb2YoIiBcdCIpOwogICAgICAgICAgICBhdXRvIHN0b3AgPSBsaW5lLmZpbmRfZmlyc3Rfb2YoIiBcdCIsIHN0YXJ0ICsgMSk7CiAgICAgICAgICAgIGl0ZW0ucXVhbnRpdHkgPSBzdGQ6OnN0b2kobGluZS5zdWJzdHIoc3RhcnQsIHN0b3AgLSBzdGFydCkpOwoKICAgICAgICAgICAgc3RhcnQgPSBsaW5lLmZpbmRfZmlyc3Rfbm90X29mKCIgXHQiLCBzdG9wICsgMSk7CiAgICAgICAgICAgIHN0b3AgPSBsaW5lLmZpbmQoIiBhdCAiLCBzdGFydCk7CiAgICAgICAgICAgIGl0ZW0ubmFtZSA9IGxpbmUuc3Vic3RyKHN0YXJ0LCBzdG9wIC0gc3RhcnQpOwoKICAgICAgICAgICAgc3RhcnQgPSBsaW5lLmZpbmRfZmlyc3Rfbm90X29mKCIgXHQiLCBzdG9wICsgNCk7CiAgICAgICAgICAgIGl0ZW0ucHJpY2UgPSBzdGQ6OnN0b2QobGluZS5zdWJzdHIoc3RhcnQpKTsKICAgICAgICB9CiAgICB9CiAgICBjYXRjaCAoY29uc3Qgc3RkOjpsb2dpY19lcnJvciAmKQogICAgewogICAgICAgIGluLnNldHN0YXRlKHN0ZDo6aW9zX2Jhc2U6OmZhaWxiaXQpOyAKICAgIH0KCiAgICByZXR1cm4gaW47Cn0KCmludCBtYWluKCkKewogICAgaXRlbUluZm8gaXRlbTsKCXN0ZDo6dmVjdG9yPGl0ZW1JbmZvPiBpdGVtczsKCiAgICB3aGlsZSAoc3RkOjpjaW4gPj4gaXRlbSkKICAgIHsgCiAgICAgICAgaXRlbXMucHVzaF9iYWNrKGl0ZW0pOwogICAgfQoKICAgIC8vIHVzZSBpdGVtcyBhcyBuZWVkZWQuLi4KICAgIAogICAgZm9yKGF1dG8gJml0ZW0gOiBpdGVtcykKICAgIHsKICAgIAlzdGQ6OmNvdXQgPDwgaXRlbS5uYW1lIDw8ICI6ICIgPDwgaXRlbS5xdWFudGl0eSA8PCAiIEAgIiA8PCBpdGVtLnByaWNlIDw8IHN0ZDo6ZW5kbDsKICAgIH0KCiAgICByZXR1cm4gMDsKfQ==