#include #define REP_(i, a_, b_, a, b, ...) \ for (int i = (a), END_##i = (b); i < END_##i; ++i) #define REP(i, ...) REP_(i, __VA_ARGS__, __VA_ARGS__, 0, __VA_ARGS__) using i64 = long long; void print() { std::cout << "\n"; } template void print(const T &x) { std::cout << x << "\n"; } template void print(const Head &head, Tail... tail) { std::cout << head << " "; print(tail...); } struct Input { template operator T() const { T x; std::cin >> x; return x; } } in; #ifdef MY_DEBUG #include "debug_dump.hpp" #else #define DUMP(...) #endif using namespace std; auto solve() { const int n = in; map m0, m1; REP(i, n) { const int a = in, b = in, t = in; if (a == 0) { ++m0[b - t]; } else { ++m1[b - t]; } } i64 ans = 0; for (auto[k, c]: m0) { ans += i64(c) * m1[k]; } return ans; } int main() { ios_base::sync_with_stdio(false), cin.tie(nullptr); print(solve()); }