import sys sys.setrecursionlimit(5000) def get_dist2(d1, d2): x1, y1, r1 = d1 x2, y2, r2 = d2 return (x1-x2) ** 2 + (y1 - y2) ** 2 def are_tangent(d1, d2): x1, y1, r1 = d1 x2, y2, r2 = d2 return get_dist2(d1, d2) == (r1 + r2) ** 2 n = int(input()) disks = [] edges = [[] for asdf in range(n)] for _ in range(n): x, y, r = map(int, input().split()) disks.append((x,y,r)) for i in range(n): for j in range(i + 1, n): if i != j: if are_tangent(disks[i], disks[j]): edges[i].append(j) edges[j].append(i) # print(disks) # print(edges) visited = [False] * n colors = [0] * n component = [] def is_bipartite(i, color): global visited global component global colors # print(i, color) visited[i] = True component.append(i) if colors[i] == 0: colors[i] = color elif colors[i] != color: return False other_color = 3 - color for j in edges[i]: if colors[j] == 0: return is_bipartite(j, other_color) elif colors[j] != other_color: return False return True for i in range(n): if not visited[i]: component = [] if is_bipartite(i, 1): color1 = 0 color2 = 0 for j in component: if colors[j] == 1: color1 += 1 else: color2 += 1 if color2 != color1: print('YES') break else: print('NO')