# Задача: Мишени (Разделите их все)

# После работы Оля и Толя решили вместе сходить в тир. После прохождения вводного инструктажа
# и получения оружия они оказались на позициях для стрельбы, а напротив них находятся
# n мишеней. Все мишени можно считать фигурами, нанесёнными на бесконечную плоскость,
# при этом каждая мишень является кругом или прямоугольником, мишени могут накладываться
# и пересекаться произвольным образом.
# Перед тем как начать стрельбу, Оля и Толя хотят убедиться, что они смогут однозначно
# идентифицировать результаты своих выстрелов. Для этого они договорились провести прямую,
# которая поделит плоскость с мишенями на две части. Однако, чтобы никому не было обидно,
# они хотят провести прямую таким образом, чтобы каждая мишень была поделена ровно пополам,
# то есть для каждого круга и каждого прямоугольника должно быть верно,
# что прямая делит его на две фигуры равной площади.
# Когда Оля и Толя наконец закончили прорабатывать все условия разделения мишеней на две части,
# они начали сомневаться, что провести такую прямую вообще возможно, и просят вас ответить на этот вопрос.

# Формат ввода
# В первой строке входных данных записано целое число n — количество мишеней (1 ≤ n ≤ 100 000).
# Каждая из последующих n строк содержит целое число ti (0 или 1), обозначающее тип мишени.
# Если ti = 0, то мишень является кругом и далее следуют три целых числа, определяющие радиус r
# и координаты x, y центра круга соответственно.
# Если ti = 1, то мишень является прямоугольником, который затем определяют восемь целых чисел
# x1, y1, x2, y2, x3, y3,x4, y4 — координаты всех четырёх вершин, перечисленных в порядке обхода
# по часовой стрелке или против часовой стрелки. Гарантируется, что данные четыре вершины
# образуют прямоугольник ненулевой площади.

# Формат вывода
# Если существует прямая, которая поделит каждый из имеющихся кругов и прямоугольников
# на две части одинаковой площади, выведите “Yes”. В противном случае выведите “No”.

# Пример 1
# Ввод
# 3
# 0 1 1 1
# 0 2 2 2
# 0 3 3 3
# Вывод
# Yes

# Пример 2
# Ввод
# 1
# 1 0 0 0 1 1 1 1 0
# Вывод
# Yes

# Пример 3
# Ввод
# 3
# 1 0 0 0 1 1 1 1 0
# 0 10 10 10
# 0 1 2 3
# Вывод
# No

targets = int(input())

coordinates = []

for i in range(targets):
    entry = [int(el) for el in input().split()]
    if entry[0] == 0:
        coordinates.append((entry[2], entry[3]))
    else:
        _, x1, y1, x2, y2, x3, y3, x4, y4 = entry

        # Такой способ поиска центра прямоугольника связан с тем,
        # что судя по тестам, фигуры могут быть повернуты как угодно,
        # в том числе в форме ромба, когда координаты частично совпадают.
        x_min, _, _, x_max = sorted([x1, x2, x3, x4])
        y_min, _, _, y_max = sorted([y1, y2, y3, y4])

        halve_hor = (x_max - x_min) / 2
        halve_vert = (y_max - y_min) / 2

        x_center = x_min + halve_hor
        y_center = y_min + halve_vert
        coordinates.append((x_center, y_center))

# Необходимо удостовериться, что существует прямая, проходящая через центры всех окружностей и прямоугольников.
# Для этого проверяет коэффициенты линейной регрессии и параметры сдвига по оси y.
# Дополнительно проверяем, что прямая является или не является вертикальной линией (разные значения y
# при всех одинаковых значениях x).

x, y = coordinates[0]
slope = None
intercept = None
vert_line = False
res = 'Yes'

for x_next, y_next in coordinates[1:]:
    if x_next == x:
        if y_next != y:
            if slope is not None:
                res = 'No'
                break
            vert_line = True
        continue
    else:
        if not vert_line:
            if slope is None:
                slope = (y_next - y) / (x_next - x)
                intercept = y - slope * x
            else:
                next_slope = (y_next - y) / (x_next - x)
                next_intercept = y_next - next_slope * x_next
                if slope != next_slope or intercept != next_intercept:
                    res = 'No'
                    break
        else:
            res = 'No'
            break

print(res)
