/*
* Author: Geeza
*/
#include <bits/stdc++.h>
#define ld long double
#define ll long long
#define pb push_back
#define fin(a, n) for(int i = a; i < n; i++)
#define fjn(a, n) for(int j = a; j < n; j++)
#define all(a) a.begin(),a.end()
#define allr(a) a.rbegin(),a.rend()
#define FAST ios_base::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr)
using namespace std;
const double PI = acos(-1);
const int N = 2e3+10;
const ll oo = 0x3f3f3f3f3f3f3f3f;
const int MOD = 1000000007, inf = 1e18;
string di[] = {"D","L", "U", "R", "UL", "UR", "DL", "DR"};
// int dx[] = {+1, +0, +0, -1, -1, -1, +1, +1};
// int dy[] = {+0, -1, +1, +0, -1, +1, -1, +1};
char dc[] = {'D', 'L', 'R', 'U'};
vector<vector<int>> adj;
vector<int> color;
bool bad;
void dfs(int u, int c) {
if (bad) return;
color[u] = c;
for (auto v : adj[u]) {
if (color[v] == -1)
dfs(v, c^1);
if (color[v] == c) bad = true;
}
}
void solve() {
int n; cin >> n;
vector<array<ll, 3>> v;
fin(0, n) {
ll x, y, r; cin >> x >> y >> r;
v.push_back({x, y, r});
}
adj = vector<vector<int>>(n+1);
color.assign(n+1, -1);
bad = false;
for (int i = 0; i < v.size(); i++) {
for (int j = 0; j < v.size(); j++) {
if (i == j)continue;
ll dx = v[i][0]-v[j][0], dy = v[i][1]-v[j][1];
ll dist = dx*dx + dy*dy;
ll r = v[i][2]+v[j][2];
if (r*r == dist) {
adj[i].push_back(j);
adj[j].push_back(i);
}
}
}
fin(0, n) {
if (color[i] == -1) {
dfs(i, 0);
}
}
if (bad) return void(cout << "NO\n");
cout << "YES\n";
}
int main() {
FAST;
#ifndef ONLINE_JUDGE
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
#endif
int tt = 1; //cin >> tt;
while (tt--) {
solve();
//cout << "Case #" << c++ << ": ";
}
return 0;
}
LyoKKiBBdXRob3I6IEdlZXphCiAqLwoKI2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CgojZGVmaW5lIGxkIGxvbmcgZG91YmxlCiNkZWZpbmUgbGwgbG9uZyBsb25nCiNkZWZpbmUgcGIgcHVzaF9iYWNrCiNkZWZpbmUgZmluKGEsIG4pIGZvcihpbnQgaSA9IGE7IGkgPCBuOyBpKyspCiNkZWZpbmUgZmpuKGEsIG4pIGZvcihpbnQgaiA9IGE7IGogPCBuOyBqKyspCiNkZWZpbmUgYWxsKGEpIGEuYmVnaW4oKSxhLmVuZCgpCiNkZWZpbmUgYWxscihhKSBhLnJiZWdpbigpLGEucmVuZCgpCiNkZWZpbmUgRkFTVCBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKGZhbHNlKSwgY2luLnRpZShudWxscHRyKSwgY291dC50aWUobnVsbHB0cikKCnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpjb25zdCBkb3VibGUgUEkgPSBhY29zKC0xKTsKY29uc3QgaW50IE4gPSAyZTMrMTA7CmNvbnN0IGxsIG9vID0gMHgzZjNmM2YzZjNmM2YzZjNmOwpjb25zdCBpbnQgTU9EID0gMTAwMDAwMDAwNywgaW5mID0gMWUxODsKCnN0cmluZyBkaVtdID0geyJEIiwiTCIsICJVIiwgIlIiLCAiVUwiLCAiVVIiLCAiREwiLCAiRFIifTsKLy8gaW50IGR4W10gPSB7KzEsICswLCArMCwgLTEsIC0xLCAtMSwgKzEsICsxfTsKLy8gaW50IGR5W10gPSB7KzAsIC0xLCArMSwgKzAsIC0xLCArMSwgLTEsICsxfTsKY2hhciBkY1tdID0geydEJywgJ0wnLCAnUicsICdVJ307Cgp2ZWN0b3I8dmVjdG9yPGludD4+IGFkajsKdmVjdG9yPGludD4gY29sb3I7CmJvb2wgYmFkOwoKdm9pZCBkZnMoaW50IHUsIGludCBjKSB7CiAgICBpZiAoYmFkKSByZXR1cm47CiAgICBjb2xvclt1XSA9IGM7CiAgICBmb3IgKGF1dG8gdiA6IGFkalt1XSkgewogICAgICAgIGlmIChjb2xvclt2XSA9PSAtMSkKICAgICAgICAgICAgZGZzKHYsIGNeMSk7CiAgICAgICAgaWYgKGNvbG9yW3ZdID09IGMpIGJhZCA9IHRydWU7CiAgICB9Cn0KCnZvaWQgc29sdmUoKSB7CiAgICBpbnQgbjsgY2luID4+IG47CiAgICB2ZWN0b3I8YXJyYXk8bGwsIDM+PiB2OwogICAgZmluKDAsIG4pIHsKICAgICAgICBsbCB4LCB5LCByOyBjaW4gPj4geCA+PiB5ID4+IHI7CiAgICAgICAgdi5wdXNoX2JhY2soe3gsIHksIHJ9KTsKICAgIH0KICAgIGFkaiA9IHZlY3Rvcjx2ZWN0b3I8aW50Pj4obisxKTsKICAgIGNvbG9yLmFzc2lnbihuKzEsIC0xKTsKICAgIGJhZCA9IGZhbHNlOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2LnNpemUoKTsgaSsrKSB7CiAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCB2LnNpemUoKTsgaisrKSB7CiAgICAgICAgICAgIGlmIChpID09IGopY29udGludWU7CiAgICAgICAgICAgIGxsIGR4ID0gdltpXVswXS12W2pdWzBdLCBkeSA9IHZbaV1bMV0tdltqXVsxXTsKICAgICAgICAgICAgbGwgZGlzdCA9IGR4KmR4ICsgZHkqZHk7CiAgICAgICAgICAgIGxsIHIgPSB2W2ldWzJdK3Zbal1bMl07CiAgICAgICAgICAgIGlmIChyKnIgPT0gZGlzdCkgewogICAgICAgICAgICAgICAgYWRqW2ldLnB1c2hfYmFjayhqKTsKICAgICAgICAgICAgICAgIGFkaltqXS5wdXNoX2JhY2soaSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgZmluKDAsIG4pIHsKICAgICAgICBpZiAoY29sb3JbaV0gPT0gLTEpIHsKICAgICAgICAgICAgZGZzKGksIDApOwogICAgICAgIH0KICAgIH0KCiAgICBpZiAoYmFkKSByZXR1cm4gdm9pZChjb3V0IDw8ICJOT1xuIik7CiAgICBjb3V0IDw8ICJZRVNcbiI7Cn0KCmludCBtYWluKCkgewogICAgRkFTVDsKI2lmbmRlZiBPTkxJTkVfSlVER0UKICAgIGZyZW9wZW4oImlucHV0LnR4dCIsICJyIiwgc3RkaW4pOwogICAgZnJlb3Blbigib3V0cHV0LnR4dCIsICJ3Iiwgc3Rkb3V0KTsKI2VuZGlmCiAgICBpbnQgdHQgPSAxOyAvL2NpbiA+PiB0dDsKICAgIHdoaWxlICh0dC0tKSB7CiAgICAgICAgc29sdmUoKTsKICAgICAgICAvL2NvdXQgPDwgIkNhc2UgIyIgPDwgYysrIDw8ICI6ICI7CiAgICB9CiAgICByZXR1cm4gMDsKfQ==