Vanya got bored and he painted *n* distinct points on the plane. After that he connected all the points pairwise and saw that as a result many triangles were formed with vertices in the painted points. He asks you to count the number of the formed triangles with the non-zero area.
The first line contains integer *n* (1 ≤ *n* ≤ 2000) — the number of the points painted on the plane. 

Next *n* lines contain two integers each *x*<sub class="lower-index">*i*</sub>, *y*<sub class="lower-index">*i*</sub> ( - 100 ≤ *x*<sub class="lower-index">*i*</sub>, *y*<sub class="lower-index">*i*</sub> ≤ 100) — the coordinates of the *i*-th point. It is guaranteed that no two given points coincide.
from math import gcd

def comb(a):
    return (a*(a-1)*(a-2)//6)

n = int(input())
s = []
for i in range(n):
    x, y = map(int, input().split())
    s.append((x, y))

aux = 0
for i in range(n):
    x, y = s[i]
    Mup, Mdown = {}, {}
    der, iz = 0, 0
    for j in range(n):
        if i != j:
            a, b = s[j]
            aux1 = x - a
            aux2 = y - b
            fuu = gcd(abs(aux1), abs(aux2))
            if aux1 < 0:
                aux1 *= -1
                aux2 *= -1
            if aux1 == 0:
                aux2 = abs(aux2)
            if b > y:
                Mup[(aux1//fuu, aux2//fuu)] = Mup.get((aux1//fuu, aux2//fuu), 0) + 1
            elif b < y:
                Mdown[(aux1//fuu, aux2//fuu)] = Mdown.get((aux1//fuu, aux2//fuu), 0) + 1
            elif b == y:
                if a > x:
                    der += 1
                elif a < x:
                    iz += 1
    for key in Mup:
        if key in Mdown:
            aux += Mup[key]*Mdown[key]
    aux += der*iz

print(comb(n)-aux)

	     	 	 	 	 	 				         	