#include using namespace std; typedef long long ll; typedef long double ld; typedef pair ii; typedef vector vi; typedef vector vvi; typedef vector vii; #define x first #define y second #define pb push_back #define eb emplace_back #define all(v) (v).begin(), (v).end() const ld PI = acos((ld) -1); struct trie { bool word; unordered_map adj; trie() : word(false) {}; ll addWord(const vi& A, ll i) { if (i == A.size()) { if (word) { return 0; } else { word = true; return 1; } } if (!adj[A[i]]) adj[A[i]] = new trie(); return adj[A[i]]->addWord(A, i+1); } }; void run() { ll n; cin >> n; ll res = 0; trie T; for (ll j = 0; j < n; j++) { ll m; cin >> m; vi A; A.pb(m); vii B(m); for (ll i = 0; i < m; i++) { cin >> B[i].x >> B[i].y; } sort(all(B)); for (ll i = 1; i < m; i++) { A.pb(B[i].x-B[0].x); A.pb(B[i].y-B[0].y); } res += T.addWord(A,0); } cout << res << endl; } signed main() { ios_base::sync_with_stdio(false); cin.tie(0); run(); return 0; }