import math


# noinspection PyTypeChecker
class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def __neg__(self): # operator - (унарный), противоположный вектор
        return Point(-self.x, -self.y)

    def __invert__(self): # operator ~ (унарный), поворот на 90 градусов
        return Point(-self.y, self.x)

    def __add__(self, other): # operator +, сложение векторов
        return Point(self.x + other.x, self.y + other.y)

    def __sub__(self, other): # operator -, вычитание векторов
        return Point(self.x - other.x, self.y - other.y)

    def __truediv__(self, other): # operator /, скалярное произведение
        return self.x * other.x + self.y * other.y

    def __mod__(self, other): # operator %, векторное произведение
        return self.x * other.y - self.y * other.x

    def __mul__(self, other): # operator *, умножение на число
        return {self.x * other, self.y * other}

    def argument(self):
        return math.atan2(self.y, self.x)

    def length(self):
        return math.sqrt(self / self)


a, b = Point(4, 2), Point(10, 12)
c = a + b
print(c.length(), c.argument() / math.pi, '* PI')
print(c / Point(-1, 1), c % Point(-1, 1))