#include <iostream>
#include <sstream>
#include <vector>
#include <cctype>
struct spell {
std::string name;
std::string effect;
spell(std::string str) {
std::istringstream strm(str);
strm >> name >> effect;
}
};
struct spellbook {
std::string title;
std::string author;
int pages;
std::vector<spell> spells; // vector for nicer code and a cleaner name
spellbook(std::string str) {
std::istringstream strm(str);
strm >> title >> author >> pages;
}
};
bool is_book(std::string str) {
return isdigit(str.back());
}
int main() {
std::vector<spellbook> books;
// ifstream fhand("Some/File/Location.txt");
std::string line;
while(std::getline(std::cin, line)) {
if(is_book(line)) {
books.push_back(spellbook(line));
} else {
books.back().spells.push_back(spell(line));
}
}
for(auto book : books) {
std::cout << book.title << ", by: " << book.author << std::endl;
std::cout << "Contains..." << std::endl;
for(auto sp : book.spells) {
std::cout << "\t" << sp.name << ": " << sp.effect << std::endl;
}
std::cout << std::endl;
}
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3N0cmVhbT4KI2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPGNjdHlwZT4KCnN0cnVjdCBzcGVsbCB7CiAgICBzdGQ6OnN0cmluZyBuYW1lOwogICAgc3RkOjpzdHJpbmcgZWZmZWN0OwogICAgc3BlbGwoc3RkOjpzdHJpbmcgc3RyKSB7CiAgICAgICAgc3RkOjppc3RyaW5nc3RyZWFtIHN0cm0oc3RyKTsKICAgICAgICBzdHJtID4+IG5hbWUgPj4gZWZmZWN0OwogICAgfQp9OwoKc3RydWN0IHNwZWxsYm9vayB7CiAgICBzdGQ6OnN0cmluZyB0aXRsZTsKICAgIHN0ZDo6c3RyaW5nIGF1dGhvcjsKICAgIGludCBwYWdlczsKICAgIHN0ZDo6dmVjdG9yPHNwZWxsPiBzcGVsbHM7IC8vIHZlY3RvciBmb3IgbmljZXIgY29kZSBhbmQgYSBjbGVhbmVyIG5hbWUKICAgIHNwZWxsYm9vayhzdGQ6OnN0cmluZyBzdHIpIHsKICAgICAgICBzdGQ6OmlzdHJpbmdzdHJlYW0gc3RybShzdHIpOwogICAgICAgIHN0cm0gPj4gdGl0bGUgPj4gYXV0aG9yID4+IHBhZ2VzOwogICAgfQp9OwoKYm9vbCBpc19ib29rKHN0ZDo6c3RyaW5nIHN0cikgewogICAgcmV0dXJuIGlzZGlnaXQoc3RyLmJhY2soKSk7Cn0KCmludCBtYWluKCkgewogICAgc3RkOjp2ZWN0b3I8c3BlbGxib29rPiBib29rczsKICAgIC8vIGlmc3RyZWFtIGZoYW5kKCJTb21lL0ZpbGUvTG9jYXRpb24udHh0Iik7CiAgICBzdGQ6OnN0cmluZyBsaW5lOwogICAgd2hpbGUoc3RkOjpnZXRsaW5lKHN0ZDo6Y2luLCBsaW5lKSkgewogICAgICAgIGlmKGlzX2Jvb2sobGluZSkpIHsKICAgICAgICAgICAgYm9va3MucHVzaF9iYWNrKHNwZWxsYm9vayhsaW5lKSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgYm9va3MuYmFjaygpLnNwZWxscy5wdXNoX2JhY2soc3BlbGwobGluZSkpOwogICAgICAgIH0KICAgIH0KICAgIAogICAgZm9yKGF1dG8gYm9vayA6IGJvb2tzKSB7CiAgICAJc3RkOjpjb3V0IDw8IGJvb2sudGl0bGUgPDwgIiwgYnk6ICIgPDwgYm9vay5hdXRob3IgPDwgc3RkOjplbmRsOwogICAgCXN0ZDo6Y291dCA8PCAiQ29udGFpbnMuLi4iIDw8IHN0ZDo6ZW5kbDsKICAgIAlmb3IoYXV0byBzcCA6IGJvb2suc3BlbGxzKSB7CiAgICAJCXN0ZDo6Y291dCA8PCAiXHQiIDw8IHNwLm5hbWUgPDwgIjogIiA8PCBzcC5lZmZlY3QgPDwgc3RkOjplbmRsOwogICAgCX0KICAgIAlzdGQ6OmNvdXQgPDwgc3RkOjplbmRsOwogICAgfQp9