#include <bits/stdc++.h>   using namespace std;   long long int insig;   void Out(vector<long long int> x) {     for (long long int i = 0; i < x.size(); i++) {       cout << x[i] <<    ;     }     cout << endl;   }   int main() {     ios_base::sync_with_stdio(0);     cin.tie(0);     cout.tie(0);     long long int N;     cin >> N;     vector<pair<long long int, long long int> > p;     long long int c1, c2;     for (long long int i = 0; i < N; i++) {       cin >> c1 >> c2;       p.push_back(make_pair(c1, c2));     }     long long int ans =         (long long int)(N * (N - 1LL) * (N - 2LL) * (N - 3LL) * (N - 4LL)) /         120LL;     ans *= 5;     long long int l;     long long int a = 1;     long long int b = -1;     long double val;     for (long long int i = 0; i < N; i++) {       long long int x = p[i].first;       long long int y = p[i].second;       vector<long double> t1, t2, t3, t4, t5, t6, t7, t8;       long double val;       for (long long int j = 0; j < N; j++) {         if (j == i) {           continue;         }         if (p[j].first != x) {           val = (long double)(((long double)(p[j].second - y)) /                               ((long double)(p[j].first - x)));         }         if (p[j].first == x && p[j].second > y) {           t6.push_back(0);         } else if (p[j].first == x && p[j].second < y) {           t8.push_back(0);         } else if (p[j].first > x && p[j].second == y) {           t5.push_back(val);         } else if (p[j].first < x && p[j].second == y) {           t7.push_back(val);         } else if (p[j].first > x && p[j].second > y) {           t1.push_back(val);         } else if (p[j].first > x && p[j].second < y) {           t4.push_back(-val);         } else if (p[j].first < x && p[j].second > y) {           t2.push_back(-val);         } else if (p[j].first < x && p[j].second < y) {           t3.push_back(val);         }       }       sort(t1.begin(), t1.end());       sort(t2.begin(), t2.end());       sort(t3.begin(), t3.end());       sort(t4.begin(), t4.end());       for (long long int j = 0; j < t1.size(); j++) {         l = (j + t5.size() + t4.size() + t8.size() +              (long long int)(t3.end() -                              lower_bound(t3.begin(), t3.end(), t1[j])));         ans -= (long long int)(l * (l - 1LL) * (l - 2LL)) / 6LL;       }       for (long long int j = 0; j < t2.size(); j++) {         l = (t2.size() - j - 1 + t6.size() + t1.size() + t5.size() +              (long long int)(lower_bound(t4.begin(), t4.end(), t2[j]) -                              t4.begin()));         ans -= (long long int)(l * (l - 1LL) * (l - 2LL)) / 6LL;       }       for (long long int j = 0; j < t3.size(); j++) {         l = (j + t7.size() + t2.size() + t6.size() +              (long long int)(t1.end() -                              lower_bound(t1.begin(), t1.end(), t3[j])));         ans -= (long long int)(l * (l - 1LL) * (l - 2LL)) / 6LL;       }       for (long long int j = 0; j < t4.size(); j++) {         l = (t4.size() - j - 1 + t8.size() + t3.size() + t7.size() +              (long long int)(lower_bound(t2.begin(), t2.end(), t4[j]) -                              t2.begin()));         ans -= (long long int)(l * (l - 1LL) * (l - 2LL)) / 6LL;       }       if (t5.size() == 1) {         l = (t4.size() + t8.size() + t3.size());         ans -= (long long int)(l * (l - 1LL) * (l - 2LL)) / 6LL;       }       if (t6.size() == 1) {         l = (t1.size() + t5.size() + t4.size());         ans -= (long long int)(l * (l - 1LL) * (l - 2LL)) / 6LL;       }       if (t7.size() == 1) {         l = (t2.size() + t6.size() + t1.size());         ans -= (long long int)(l * (l - 1LL) * (l - 2LL)) / 6LL;       }       if (t8.size() == 1) {         l = (t3.size() + t7.size() + t2.size());         ans -= (long long int)(l * (l - 1LL) * (l - 2LL)) / 6LL;       }     }     cout << ans << endl;     return 0;   }