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.
import math
class fraction:
    def __init__(self, top, bottom):
        self.num = top // math.gcd(top, bottom)
        self.den = bottom // math.gcd(top, bottom)
    
    def multiply(self, other):
        if isinstance(other, fraction):
            return fraction(self.num * other.num, self.den * other.den)
        else:
            return fraction(self.num * other, self.den)
    
    def sum(self, other):
        return fraction(self.num + other * self.den, self.den)

    def tostring(self):
        return str(self.num) + ' ' + str(self.den)

vistos = dict()
pares = [[int(x) for x in input().split()] for _ in range(int(input()))]
for par1 in range(len(pares)):
    for par2 in range(par1+1, len(pares)):
        x1, y1, x2, y2 = pares[par1][0], pares[par1][1], pares[par2][0], pares[par2][1]
        a = fraction(y2 - y1, x2-x1)
        b = a.multiply(x1).multiply(-1).sum(y1)
        concat = a.tostring() + ' ' + b.tostring()
        if concat in vistos.keys():
            vistos[concat] += 1
        else:
            vistos[concat] = 1

soma = (len(pares) * (len(pares)-1)*(len(pares)-2))//6
for i in vistos.values():
    soma -= (i * (i-1) * (i-2))//6
print(soma)

    


  	   		 	 	 			  				  	 			 	