#include #include using namespace std; struct Edge { Edge(size_t xx, size_t yy) : x(xx), y(yy) { if (x < y) length = y - x; else length = x - y; } size_t x, y; size_t length; }; bool cmp(const Edge &a, const Edge &b) { return a.length > b.length; } size_t count(const vector &edges) { size_t ans = 0; for (size_t v = 0; v < edges.size(); v++) { for (size_t next_v = v + 1; next_v < edges.size(); next_v++) { if ((edges[v].x < edges[next_v].x && edges[v].y > edges[next_v].y) || (edges[v].x > edges[next_v].x && edges[v].y < edges[next_v].y)) ans++; } } return ans; }; int main() { vector edges; int n; cin >> n; for (int i = 0; i < n; i++) { int m; cin >> m; for (int j = 0; j < m; j++) { int l; cin >> l; edges.emplace_back(i, l); } } std::sort(edges.begin(), edges.end(), cmp); cout << count(edges); return 0; }