#include #define int long long using namespace std; bool can_draw(vector>& g, int start, vector& color) { queue q; color[start] = 1; q.push(start); int cnt1 = 1; int cnt2 = 0; while (!q.empty()) { int a = q.front(); q.pop(); for (int to: g[a]) { if (!color[to]) { color[to] = 3 - color[a]; if (color[to] == 1) cnt1++; else cnt2++; q.push(to); } } } return cnt1 != cnt2; } void dfs(vector>& g, vector& col, int u, int cur) { col[u] = cur; for (int to : g[u]) { if (!col[to]) { dfs(g, col, to, cur); } } } int32_t main() { cin.tie(nullptr); cout.tie(nullptr); iostream::sync_with_stdio(false); int n; cin >> n; vector x(n), y(n), r(n); for (int i =0; i < n; ++i) { cin >> x[i] >> y[i] >> r[i]; } vector> g(n); for (int i = 0; i < n; ++i) { for (int j = 0; j < n; ++j) { int xd = x[i] - x[j]; int yd = y[i] - y[j]; int sr = r[i] + r[j]; if (xd * xd + yd * yd == sr * sr) { g[i].push_back(j); } } } vector claster(n); vector col(n); for (int i = 0; i < n; ++i) { if (!claster[i]) { dfs(g, claster, i, 1); if (can_draw(g, i, col)) { cout << "YES\n"; return 0; } } } cout << "NO\n"; }