#include using namespace std; using ll = long long; #define all(x) begin(x), end(x) struct P { int id; int pr; }; int main() { int n; cin >> n; unordered_map cm; int ii = 0; vector> cs(n); for(int i = 0; i < n; ++i) { int m; cin >> m; for(int j = 0; j < m; ++j) { int id, p; cin >> id >> p; if(cm.find(id) == cm.end()) { cm[id] = ii; ++ii; } cs[i].push_back({cm[id], p}); } } ll b = 0; vector sts(ii, -2e9); for(int i = 0; i < n; ++i) { for(auto& c : cs[i]) { b = max(sts[c.id] + c.pr, b); } for(auto& c : cs[i]) { sts[c.id] = max(b - c.pr, sts[c.id]); } } cout << b << '\n'; return 0; }