#include<stdio.h>
struct xy {long long x, y;}a[313];
int cnt[313][313],ans[313];
long long ccw(xy a, xy b, xy c) {
long long k = a.x*b.y + b.x*c.y + c.x*a.y - a.y*b.x - b.y*c.x - c.y*a.x;
if (k > 0)return 1;
if (k < 0)return -1;
return 0;
}
bool is_in(xy a, xy b, xy c,xy d) {
int A = ccw(a, b, d), B = ccw(b, c, d), C = ccw(c, a, d);
if (!A || !B || !C)return 0;
return A == B&& B == C;
}
int jd(int a) { if (a < 0)return -a; return a; }
int main() {
int n, i, j, k;
xy P = { (long long)1e9,(long long)1e9 };
scanf("%d", &n);
for (i = 0; i < n; i++) {
scanf("%lld%lld", &a[i].x, &a[i].y);
if (P.y > a[i].y)P = a[i];
}
for (i = 0; i < n; i++)for (j = i + 1; j < n; j++)for (k = 0; k < n; k++) {
if (is_in(P, a[i], a[j], a[k]))cnt[i][j]++, cnt[j][i]++;
}
for (i = 0; i < n; i++)for (j = i + 1; j < n; j++)for (k = j + 1; k < n; k++) {
int x, flag = 0;
if (ccw(P, a[i], a[j]) > 0)i ^= j ^= i ^= j, flag = 1;
if (ccw(P, a[i], a[k]) > 0)x = cnt[j][k] - cnt[i][k] - cnt[i][j];
else if (ccw(P, a[j], a[k]) < 0)x = cnt[i][k] - cnt[j][k] - cnt[i][j];
else x = cnt[i][k] + cnt[j][k] - cnt[i][j];
if (flag)i ^= j ^= i ^= j;
x = jd(x) - (is_in(P, a[i], a[j], a[k]) || is_in(P, a[j], a[k], a[i]) || is_in(P, a[k], a[i], a[j]));
ans[jd(x)]++;
}
for (i = 0; i < n - 2; i++)printf("%d\n", ans[i]);
return 0;
}
I2luY2x1ZGU8c3RkaW8uaD4Kc3RydWN0IHh5IHtsb25nIGxvbmcgeCwgeTt9YVszMTNdOwppbnQgY250WzMxM11bMzEzXSxhbnNbMzEzXTsKbG9uZyBsb25nIGNjdyh4eSBhLCB4eSBiLCB4eSBjKSB7Cglsb25nIGxvbmcgayA9IGEueCpiLnkgKyBiLngqYy55ICsgYy54KmEueSAtIGEueSpiLnggLSBiLnkqYy54IC0gYy55KmEueDsKCWlmIChrID4gMClyZXR1cm4gMTsKCWlmIChrIDwgMClyZXR1cm4gLTE7CglyZXR1cm4gMDsKfQpib29sIGlzX2luKHh5IGEsIHh5IGIsIHh5IGMseHkgZCkgewoJaW50IEEgPSBjY3coYSwgYiwgZCksIEIgPSBjY3coYiwgYywgZCksIEMgPSBjY3coYywgYSwgZCk7CglpZiAoIUEgfHwgIUIgfHwgIUMpcmV0dXJuIDA7CglyZXR1cm4gQSA9PSBCJiYgQiA9PSBDOwp9CmludCBqZChpbnQgYSkgeyBpZiAoYSA8IDApcmV0dXJuIC1hOyByZXR1cm4gYTsgfQppbnQgbWFpbigpIHsKCWludCBuLCBpLCBqLCBrOwoJeHkgUCA9IHsgKGxvbmcgbG9uZykxZTksKGxvbmcgbG9uZykxZTkgfTsKCXNjYW5mKCIlZCIsICZuKTsKCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKCQlzY2FuZigiJWxsZCVsbGQiLCAmYVtpXS54LCAmYVtpXS55KTsKCQlpZiAoUC55ID4gYVtpXS55KVAgPSBhW2ldOwoJfQoJZm9yIChpID0gMDsgaSA8IG47IGkrKylmb3IgKGogPSBpICsgMTsgaiA8IG47IGorKylmb3IgKGsgPSAwOyBrIDwgbjsgaysrKSB7CgkJaWYgKGlzX2luKFAsIGFbaV0sIGFbal0sIGFba10pKWNudFtpXVtqXSsrLCBjbnRbal1baV0rKzsKCX0KCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspZm9yIChqID0gaSArIDE7IGogPCBuOyBqKyspZm9yIChrID0gaiArIDE7IGsgPCBuOyBrKyspIHsKCQlpbnQgeCwgZmxhZyA9IDA7CgkJaWYgKGNjdyhQLCBhW2ldLCBhW2pdKSA+IDApaSBePSBqIF49IGkgXj0gaiwgZmxhZyA9IDE7CgkJaWYgKGNjdyhQLCBhW2ldLCBhW2tdKSA+IDApeCA9IGNudFtqXVtrXSAtIGNudFtpXVtrXSAtIGNudFtpXVtqXTsKCQllbHNlIGlmIChjY3coUCwgYVtqXSwgYVtrXSkgPCAwKXggPSBjbnRbaV1ba10gLSBjbnRbal1ba10gLSBjbnRbaV1bal07CgkJZWxzZSB4ID0gY250W2ldW2tdICsgY250W2pdW2tdIC0gY250W2ldW2pdOwoJCWlmIChmbGFnKWkgXj0gaiBePSBpIF49IGo7CgkJeCA9IGpkKHgpIC0gKGlzX2luKFAsIGFbaV0sIGFbal0sIGFba10pIHx8IGlzX2luKFAsIGFbal0sIGFba10sIGFbaV0pIHx8IGlzX2luKFAsIGFba10sIGFbaV0sIGFbal0pKTsKCQlhbnNbamQoeCldKys7Cgl9Cglmb3IgKGkgPSAwOyBpIDwgbiAtIDI7IGkrKylwcmludGYoIiVkXG4iLCBhbnNbaV0pOwoJcmV0dXJuIDA7Cn0=