#include #include #include #include #include #include #include using namespace std; vector readints(string &s) { vector v; stringstream sin(s); int x; while (sin >> x) v.push_back(x); return v; } bool valid(vector &v, vector> &rules) { for (unsigned i = 0; i < v.size(); i++) for (unsigned j = i+1; j < v.size(); j++) for (auto r : rules) if (v[i] == r.second && v[j] == r.first) return false; return true; } bool canbenext(int x, vector &v, bool picked[], vector> &rules) { for (unsigned i = 0; i < v.size(); i++) { if (picked[i]) continue; for (auto r : rules) if (r.first == v[i] && r.second == x) return false; } return true; } vector sort(vector &v, vector> &rules) { vector w; bool picked[v.size()] = { 0 }; while (w.size() < v.size()) { for (unsigned i = 0; i < v.size(); i++) { if (!picked[i] && canbenext(v[i], v, picked, rules)) { picked[i] = true; w.push_back(v[i]); } } } return w; } int main() { string line; vector> rules; while (getline(cin, line)) { if (line == "") break; replace(line.begin(), line.end(), '|', ' '); auto v = readints(line); int x = v[0]; int y = v[1]; rules.push_back(make_pair(x, y)); } int tot = 0; while (getline(cin, line)) { replace(line.begin(), line.end(), ',', ' '); auto v = readints(line); if (!valid(v, rules)) { auto w = sort(v, rules); tot += w[w.size()/2]; } } cout << tot << endl; return 0; }