#include <bits/stdc++.h>
using namespace std;
#define int long long
#define nn "\n"
#define pi pair<int, int>
#define fi first
#define se second
#define lb lower_bound
#define ub upper_bound
#define eb emplace_back
#define pb push_back
#define TASK "CTAMGIACV"
#define ms(a, x) memset(a, x, sizeof(a))
#define all(a) a.begin(), a.end()
#define All(a, n) a + 1, a + 1 + n
#define LOG 19
const int INF = 1e18;
const int mod = 1e9;
const int N = 1e5 + 5;
const int MOD = 998244353;
int n;
pi p[505];
void nhap(){
cin >> n;
for(int i = 1; i <= n; i++){
cin >> p[i].fi >> p[i].se;
}
}
void solve(){
int ans = 0;
for(int i = 1; i <= n; i++){
for(int j = i + 1; j <= n; j++){
for(int k = j + 1; k <= n; k++){
int x1 = p[j].fi - p[i].fi;
int y1 = p[j].se - p[i].se;
int x2 = p[k].fi - p[i].fi;
int y2 = p[k].se - p[i].se;
if(x1 * x2 + y1 * y2 == 0){
ans++;
continue;
}
x1 = p[i].fi - p[j].fi;
y1 = p[i].se - p[j].se;
x2 = p[k].fi - p[j].fi;
y2 = p[k].se - p[j].se;
if(x1 * x2 + y1 * y2 == 0){
ans++;
continue;
}
x1 = p[i].fi - p[k].fi;
y1 = p[i].se - p[k].se;
x2 = p[j].fi - p[k].fi;
y2 = p[j].se - p[k].se;
if(x1 * x2 + y1 * y2 == 0){
ans++;
}
}
}
}
cout << ans << nn;
}
signed main(){
if(fopen(TASK".INP", "r")){
freopen(TASK".INP", "r", stdin);
freopen(TASK".OUT", "w", stdout);
}
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
nhap();
solve();
return (0 ^ 0);
}
CiNpbmNsdWRlIDxiaXRzL3N0ZGMrKy5oPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCiNkZWZpbmUgaW50IGxvbmcgbG9uZwojZGVmaW5lIG5uICJcbiIKI2RlZmluZSBwaSBwYWlyPGludCwgaW50PgojZGVmaW5lIGZpIGZpcnN0CiNkZWZpbmUgc2Ugc2Vjb25kCiNkZWZpbmUgbGIgbG93ZXJfYm91bmQKI2RlZmluZSB1YiB1cHBlcl9ib3VuZAojZGVmaW5lIGViIGVtcGxhY2VfYmFjawojZGVmaW5lIHBiIHB1c2hfYmFjawojZGVmaW5lIFRBU0sgIkNUQU1HSUFDViIKCiNkZWZpbmUgbXMoYSwgeCkgbWVtc2V0KGEsIHgsIHNpemVvZihhKSkKI2RlZmluZSBhbGwoYSkgYS5iZWdpbigpLCBhLmVuZCgpCiNkZWZpbmUgQWxsKGEsIG4pIGEgKyAxLCBhICsgMSArIG4KCiNkZWZpbmUgTE9HIDE5Cgpjb25zdCBpbnQgSU5GID0gMWUxODsKY29uc3QgaW50IG1vZCA9IDFlOTsKY29uc3QgaW50IE4gPSAxZTUgKyA1Owpjb25zdCBpbnQgTU9EID0gOTk4MjQ0MzUzOwppbnQgbjsKcGkgcFs1MDVdOwoKdm9pZCBuaGFwKCl7CiAgICBjaW4gPj4gbjsKICAgIGZvcihpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKXsKICAgICAgICBjaW4gPj4gcFtpXS5maSA+PiBwW2ldLnNlOwogICAgfQp9Cgp2b2lkIHNvbHZlKCl7CiAgICBpbnQgYW5zID0gMDsKICAgIGZvcihpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKXsKICAgICAgICBmb3IoaW50IGogPSBpICsgMTsgaiA8PSBuOyBqKyspewogICAgICAgICAgICBmb3IoaW50IGsgPSBqICsgMTsgayA8PSBuOyBrKyspewogICAgICAgICAgICAgICAgaW50IHgxID0gcFtqXS5maSAtIHBbaV0uZmk7CiAgICAgICAgICAgICAgICBpbnQgeTEgPSBwW2pdLnNlIC0gcFtpXS5zZTsKICAgICAgICAgICAgICAgIGludCB4MiA9IHBba10uZmkgLSBwW2ldLmZpOwogICAgICAgICAgICAgICAgaW50IHkyID0gcFtrXS5zZSAtIHBbaV0uc2U7CiAgICAgICAgICAgICAgICBpZih4MSAqIHgyICsgeTEgKiB5MiA9PSAwKXsKICAgICAgICAgICAgICAgICAgICBhbnMrKzsKICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHgxID0gcFtpXS5maSAtIHBbal0uZmk7CiAgICAgICAgICAgICAgICB5MSA9IHBbaV0uc2UgLSBwW2pdLnNlOwogICAgICAgICAgICAgICAgeDIgPSBwW2tdLmZpIC0gcFtqXS5maTsKICAgICAgICAgICAgICAgIHkyID0gcFtrXS5zZSAtIHBbal0uc2U7CiAgICAgICAgICAgICAgICBpZih4MSAqIHgyICsgeTEgKiB5MiA9PSAwKXsKICAgICAgICAgICAgICAgICAgICBhbnMrKzsKICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHgxID0gcFtpXS5maSAtIHBba10uZmk7CiAgICAgICAgICAgICAgICB5MSA9IHBbaV0uc2UgLSBwW2tdLnNlOwogICAgICAgICAgICAgICAgeDIgPSBwW2pdLmZpIC0gcFtrXS5maTsKICAgICAgICAgICAgICAgIHkyID0gcFtqXS5zZSAtIHBba10uc2U7CiAgICAgICAgICAgICAgICBpZih4MSAqIHgyICsgeTEgKiB5MiA9PSAwKXsKICAgICAgICAgICAgICAgICAgICBhbnMrKzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIGNvdXQgPDwgYW5zIDw8IG5uOwp9CnNpZ25lZCBtYWluKCl7CiAgICBpZihmb3BlbihUQVNLIi5JTlAiLCAiciIpKXsKICAgICAgICBmcmVvcGVuKFRBU0siLklOUCIsICJyIiwgc3RkaW4pOwogICAgICAgIGZyZW9wZW4oVEFTSyIuT1VUIiwgInciLCBzdGRvdXQpOwogICAgfQogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbygwKTsKICAgIGNpbi50aWUoMCk7CiAgICBjb3V0LnRpZSgwKTsKICAgIG5oYXAoKTsKICAgIHNvbHZlKCk7CiAgICByZXR1cm4gKDAgXiAwKTsKfQo=