#include <algorithm> #include <iostream> #include <set> #include <vector> using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int Q; cin >> Q; set<int> vertices; set<pair<int, int>> edges; set<tuple<int, int, int>> faces; int v_count = 0, e_count = 0, f_count = 0; while (Q--) { int a, b, c; cin >> a >> b >> c; // 处理顶点 int new_v = 0; if (!vertices.count(a)) { vertices.insert(a); new_v++; } if (!vertices.count(b)) { vertices.insert(b); new_v++; } if (!vertices.count(c)) { vertices.insert(c); new_v++; } v_count += new_v; // 处理边(自动排序) auto e1 = make_pair(min(a, b), max(a, b)); auto e2 = make_pair(min(b, c), max(b, c)); auto e3 = make_pair(min(c, a), max(c, a)); int new_e = 0; if (!edges.count(e1)) { edges.insert(e1); new_e++; } if (!edges.count(e2)) { edges.insert(e2); new_e++; } if (!edges.count(e3)) { edges.insert(e3); new_e++; } e_count += new_e; // 处理面(全排序) int x = min({a, b, c}); int z = max({a, b, c}); int y = a + b + c - x - z; auto f = make_tuple(x, y, z); if (!faces.count(f)) { faces.insert(f); f_count++; } } cout << v_count - e_count + f_count << endl; return 0; }