human
Write me a Python code to find a pair of vectors with the minimal non-oriented angle between them given the following:
I found an interesting problem on https://codeforces.com/problemset/problem/598/C:
You are given the set of vectors on the plane, each of them starting at the origin. Your task is to find a pair of vectors with the minimal non-oriented angle between them.

Non-oriented angle is non-negative value, minimal between clockwise and counterclockwise direction angles. Non-oriented angle is always between 0 and π. For example, opposite directions vectors have angle equals to π.

-----Input-----

First line of the input contains a single integer n (2 ≤ n ≤ 100 000) — the number of vectors.

The i-th of the following n lines contains two integers x_{i} and y_{i} (|x|, |y| ≤ 10 000, x^2 + y^2 > 0) — the coordinates of the i-th vector. Vectors are numbered from 1 to n in order of appearing in the input. It is guaranteed that no two vectors in the input share the same direction (but they still can have opposite directions).

-----Output-----

Print two integer numbers a and b (a ≠ b) — a pair of indices of vectors with the minimal non-oriented angle. You can print the numbers in any order. If there are many possible answers, print any.

-----Examples-----
Input
4
-1 0
0 -1
1 0
1 1

Output
3 4

Input
6
-1 0
0 -1
1 0
1 1
-4 -5
-4 -6

Output
6 5

I tried it in Python, but could not do it. Can you solve it?
assistant
#Here is Python code to find a pair of vectors with the minimal non-oriented angle between them.

import sys
# sys.stdin = open('ivo.in')

def getkos(x, y):
    temp = (x[0] * y[0] + x[1] * y[1])
    mul = -1 if temp < 0 else 1
    return (mul * temp ** 2, (x[0] ** 2 + x[1] ** 2) * (y[0] ** 2 + y[1] ** 2))

class Drob:
    def __init__(self, num, denom):
        self.num = num
        self.denom = denom

    def __lt__(self, object):
        return self.num * object.denom < object.num * self.denom

n = int(sys.stdin.readline())

positive = []
negative = []
for i in range(n):
    x = tuple(map(int, sys.stdin.readline().split())) + (i,)
    if x[1] > 0:
        positive.append(x)
    else:
        negative.append(x)

positive.sort(key=lambda x: ((-1 if x[0] > 0 else 1) * x[0]**2 / (x[1] ** 2 +  x[0] ** 2)))
negative.sort(key=lambda x: ((1 if x[0] > 0 else -1) * x[0]**2 / (x[1] ** 2 +  x[0] ** 2)))
#negative.sort(key=lambda x,y: x[0] - y[0] if x[0] != y[0] else (y[1] - x[1]) * x[0])

all = positive + negative
# print(all)
biggest = [-1.1, 1]
bi = 0
bj = 1
for i in range(n):
    nxt = (i + 1) % n
    prev = (i + n - 1) % n

    kos1 = getkos(all[i], all[nxt])
    if kos1[1] * biggest[0] < kos1[0] * biggest[1]:
        biggest = kos1
        bi = all[i][2]
        bj = all[nxt][2]
    kos2 = getkos(all[i], all[prev])
    if kos2[1] * biggest[0] < kos2[0] * biggest[1]:
        biggest = kos2
        bi = all[i][2]
        bj = all[prev][2]
    # print("{} kos1: {} kos2: {}".format(i, kos1, kos2))

# print(biggest)
print("%d %d" % (bi + 1, bj+ 1))