#include using namespace std; using ll = long long; struct Circ { ll x, y; ll r; }; ll dist(ll x, ll y) { return x * x + y * y; } ll pow2(ll x) { return x * x; } bool tang(Circ a, Circ b) { return (dist(a.x - b.x, a.y - b.y) == pow2(a.r + b.r)); } bool dfs(int node, vector>& edges, int val, vector& viz, int& sum) { if (viz[node] != 0) { if (viz[node] != val) { return false; } else { return true; } } viz[node] = val; sum += val; for (auto& next : edges[node]) { if (!dfs(next, edges, -val, viz, sum)) { return false; } } return true; } void Solve() { int n; cin >> n; vector v; for (int i = 0; i < n; i++) { ll x, y, r; cin >> x >> y >> r; v.emplace_back(x, y, r); } vector> edges(n); for (int i = 0; i < n; i++) { for (int j = i + 1; j < n; j++) { if (tang(v[i], v[j])) { edges[i].push_back(j); edges[j].push_back(i); } } } vector viz(n); for (int i = 0; i < n; i++) { if (viz[i] == 0) { int sum = 0; if (dfs(i, edges, 1, viz, sum)) { if (sum != 0) { cout << "YES\n"; return; } } } } cout << "NO\n"; } int main() { int t = 1; for (int i = 0; i < t; i++) { Solve(); } return 0; }