#include using namespace std; using ll = long long; ll sqr(ll i) { return i*i; } vector> graph; const int mx = 1005; bool vis[mx]; bool parity[mx]; int cnt0, cnt1; bool valid; void dfs(int cur) { for(auto nxt : graph[cur]) { if(vis[nxt] && parity[nxt] != 1 - parity[cur]) { valid = false; } if(!vis[nxt]) { vis[nxt] = true; parity[nxt] = 1 - parity[cur]; if(parity[cur] == 1) { cnt0 ++; } else { cnt1 ++; } dfs(nxt); } } } int main() { int n; cin >> n; vector> pts(n); vector radii(n); for(int i = 0; i < n; i++) { cin >> pts[i].first >> pts[i].second >> radii[i]; } graph.resize(n); for(int i = 0; i < n; i++) { for(int j = 0; j < n; j++) { if(sqr(pts[i].second - pts[j].second) + sqr(pts[i].first - pts[j].first) == sqr(radii[i] + radii[j])) { graph[i].push_back(j); } } } //for(int i= 0; i < n; i++) { //cout << endl << i << ": "; // for(auto j : graph[i]) cout << j << " "; // // } for(int i = 0; i < n; i++) { if(!vis[i]) { vis[i] = true; parity[i] = 0; cnt0 = 1; cnt1 = 0; //cnt0++; valid = true; dfs(i); if(valid && cnt0 != cnt1) { cout << "YES" << endl; return 0; } } } cout << "NO" << endl; }