int main() { int n1; int ca = 1; while (cin >> n1) { Init(); for (int i = 0; i < n1; ++i) { char name[50]; int cost; scanf("%s%d", name, &cost); item_getter.insert(make_pair(name, Item(name, cost, NOR))); } int n2; cin >> n2; for (int i = 0; i < n2; ++i) { char name[50]; int cost; char list[300]; scanf("%s%d:%[^\n]", name, &cost, list); item_getter.insert(make_pair(name, Item(name, cost, MIX))); vector<pair<string, int> > & vList = mixture[name]; string slist = list; int pos = 0; // printf("list='%s'\n", list); if(slist.size()<=1) continue; while (true) { int ed = slist.find(',', pos); string sub = slist.substr(pos, ed - pos); int num; sscanf(sub.c_str(), "%s%d", name, &num); vList.push_back(pair<string, int>(name, num)); //printf("dep: %s %d!!\n", name, num); if (ed == string::npos) break; else pos = ed + 1; } } int n3; cin >> n3; for (int i = 0; i < n3; ++i) { char name[50]; int cost; scanf("%s%d", name, &cost); item_getter.insert(make_pair(name, Item(name, cost, CUS))); } Bag bag; int cmd_cnt; cin>>cmd_cnt; while(cmd_cnt--) { char op; char str[1024]; scanf("%s", str); op = str[0]; string name(str+1); if(name[0]>='0'&&name[0]<='9') { bag.money += atoi(name.c_str()); } else { if(op=='-') bag.RemoveItem(name); else bag.AddItem(name); } //printf("money = %d\n", bag.money); //printf("%c %s\n", op, name.c_str()); } printf("Case %d:\n", ca++); printf("%d\n", bag.money); printf("%d\n", bag.items.size()); sort(bag.items.begin(), bag.items.end()); for(int i=0;i<bag.items.size();++i) { printf("%s: %d\n", bag.items[i].name.c_str(), bag.items[i].num); } puts(""); } return 0; }