#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)); } const int N_MAX = 1000; Circ C[N_MAX + 5]; vector G[N_MAX + 5]; int vis[N_MAX + 5]; void DFS(int node, int t, int &sum, bool &ok) { vis[node] = t; sum += t; for(auto it : G[node]) { if(vis[it] == 0) { DFS(it, -t, sum, ok); } else { if(vis[it] == t) { ok = false; } } } } void Solve() { int N; cin >> N; for(int i = 1; i <= N; i++) { cin >> C[i].x >> C[i].y >> C[i].r; } for(int i = 1; i <= N; i++) { for(int j = i + 1; j <= N; j++) { if(tang(C[i], C[j])) { G[i].push_back(j); G[j].push_back(i); } } } for(int i = 1; i <= N; i++) { if(vis[i] == 0) { bool ok = true; int sum = 0; DFS(i, 1, sum, ok); if(ok && sum != 0) { cout << "YES\n"; exit(0); } } } cout << "NO\n"; } int main() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); int t = 1; for (int i = 0; i < t; i++) { Solve(); } return 0; }