#include <bits/stdc++.h>
#define endl '\n'
using namespace std;
const int N = 318;
struct point {
int x,y;
int idx;
int code;
point(){}
point(int a, int b, int c) {
x=a;
y=b;
idx=c;
}
};
int tests,current_case;
int n;
point a[N];
int ans[N];
point pta,ptb;
point good[N];
int sz;
int c3[N],c1[N],c1c3[N];
set < point > s;
int all;
int it[N];
void message(int current_case) {
//cerr<<"Case "<<current_case<<" solved!"<<endl;
fprintf(stderr, "Case %d solved!\n", current_case);
}
void update(int pos, int val) {
for(;pos<=all;pos+=pos&(-pos)) it[pos]+=val;
}
int query(int pos) {
--pos;
int ans=0;
for(;pos>=1;pos-=pos&(-pos)) ans+=it[pos];
return ans;
}
void compress() {
sort(good+1,good+1+sz);
for(int i=1;i<=sz;i++) {
good[i].code=i;
}
}
int count_less(point a) {
return query(a.code);
}
long long oriented_area(point a, point b, point c) {
return ((a.x-b.x)*1ll*(a.y+b.y) + (b.x-c.x)*1ll*(b.y+c.y) + (c.x-a.x)*1ll*(c.y+a.y));
}
long long area(point a, point b, point c) {
return abs(oriented_area(a,b,c));
}
bool operator <(const point &a, const point &b) {
return oriented_area(ptb,b,a)>0;
}
int prcmp(point a, point b) {
return make_pair(a.x,a.y)<make_pair(b.x,b.y);
}
bool cmpa(point a, point b) {
return oriented_area(pta,a,b)<0;
}
void solve() {
sz=0;
int i;
for(i=1;i<=n;i++) if(oriented_area(pta,ptb,a[i])>0 && prcmp(pta,a[i])) {
good[++sz]=a[i];
}
compress();
all=sz;
for(i=1;i<=sz;i++) c1c3[good[i].idx]=i-1;
for(i=1;i<=all;i++) it[i]=0;
sort(good+1,good+1+sz,cmpa);
for(i=1;i<=sz;i++) {
c3[good[i].idx]=count_less(good[i]);
update(good[i].code,1);
c1[good[i].idx]=c1c3[good[i].idx]-c3[good[i].idx];
++ans[c1[good[i].idx]];
}
}
int main() {
//ios_base::sync_with_stdio(false);
//cin.tie(NULL);
freopen("triangles.in","r",stdin);
freopen("triangles.out","w",stdout);
int i,j;
tests=1;
//scanf("%d", &tests);
//cin>>tests;
for(current_case=1;current_case<=tests;current_case++) {
scanf("%d", &n);
for(i=1;i<=n;i++) {
scanf("%d %d", &a[i].x, &a[i].y);
a[i].idx=i;
}
memset(ans,0,sizeof(ans));
for(i=1;i<=n;i++) {
for(j=1;j<=n;j++) {
pta=a[i];
ptb=a[j];
if(!prcmp(pta,ptb)) continue;
solve();
}
}
for(i=0;i<=n-3;i++) {
printf("%d\n", ans[i]);
}
MESSAGE:
message(current_case);
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgZW5kbCAnXG4nCgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY29uc3QgaW50IE4gPSAzMTg7CgpzdHJ1Y3QgcG9pbnQgewogICAgaW50IHgseTsKICAgIGludCBpZHg7CiAgICBpbnQgY29kZTsKICAgIHBvaW50KCl7fQogICAgcG9pbnQoaW50IGEsIGludCBiLCBpbnQgYykgewogICAgICAgIHg9YTsKICAgICAgICB5PWI7CiAgICAgICAgaWR4PWM7CiAgICB9Cn07CgppbnQgdGVzdHMsY3VycmVudF9jYXNlOwppbnQgbjsKcG9pbnQgYVtOXTsKaW50IGFuc1tOXTsKcG9pbnQgcHRhLHB0YjsKcG9pbnQgZ29vZFtOXTsKaW50IHN6OwppbnQgYzNbTl0sYzFbTl0sYzFjM1tOXTsKc2V0IDwgcG9pbnQgPiBzOwppbnQgYWxsOwppbnQgaXRbTl07Cgp2b2lkIG1lc3NhZ2UoaW50IGN1cnJlbnRfY2FzZSkgewogICAgLy9jZXJyPDwiQ2FzZSAiPDxjdXJyZW50X2Nhc2U8PCIgc29sdmVkISI8PGVuZGw7CiAgICBmcHJpbnRmKHN0ZGVyciwgIkNhc2UgJWQgc29sdmVkIVxuIiwgY3VycmVudF9jYXNlKTsKfQoKdm9pZCB1cGRhdGUoaW50IHBvcywgaW50IHZhbCkgewogICAgZm9yKDtwb3M8PWFsbDtwb3MrPXBvcyYoLXBvcykpIGl0W3Bvc10rPXZhbDsKfQoKaW50IHF1ZXJ5KGludCBwb3MpIHsKICAgIC0tcG9zOwogICAgaW50IGFucz0wOwogICAgZm9yKDtwb3M+PTE7cG9zLT1wb3MmKC1wb3MpKSBhbnMrPWl0W3Bvc107CiAgICByZXR1cm4gYW5zOwp9Cgp2b2lkIGNvbXByZXNzKCkgewogICAgc29ydChnb29kKzEsZ29vZCsxK3N6KTsKICAgIGZvcihpbnQgaT0xO2k8PXN6O2krKykgewogICAgICAgIGdvb2RbaV0uY29kZT1pOwogICAgfQp9CgppbnQgY291bnRfbGVzcyhwb2ludCBhKSB7CiAgICByZXR1cm4gcXVlcnkoYS5jb2RlKTsKfQoKbG9uZyBsb25nIG9yaWVudGVkX2FyZWEocG9pbnQgYSwgcG9pbnQgYiwgcG9pbnQgYykgewogICAgcmV0dXJuICgoYS54LWIueCkqMWxsKihhLnkrYi55KSArIChiLngtYy54KSoxbGwqKGIueStjLnkpICsgKGMueC1hLngpKjFsbCooYy55K2EueSkpOwp9Cgpsb25nIGxvbmcgYXJlYShwb2ludCBhLCBwb2ludCBiLCBwb2ludCBjKSB7CiAgICByZXR1cm4gYWJzKG9yaWVudGVkX2FyZWEoYSxiLGMpKTsKfQoKYm9vbCBvcGVyYXRvciA8KGNvbnN0IHBvaW50ICZhLCBjb25zdCBwb2ludCAmYikgewogICAgcmV0dXJuIG9yaWVudGVkX2FyZWEocHRiLGIsYSk+MDsKfQoKaW50IHByY21wKHBvaW50IGEsIHBvaW50IGIpIHsKICAgIHJldHVybiBtYWtlX3BhaXIoYS54LGEueSk8bWFrZV9wYWlyKGIueCxiLnkpOwp9Cgpib29sIGNtcGEocG9pbnQgYSwgcG9pbnQgYikgewogICAgcmV0dXJuIG9yaWVudGVkX2FyZWEocHRhLGEsYik8MDsKfQoKdm9pZCBzb2x2ZSgpIHsKICAgIHN6PTA7CiAgICBpbnQgaTsKICAgIGZvcihpPTE7aTw9bjtpKyspIGlmKG9yaWVudGVkX2FyZWEocHRhLHB0YixhW2ldKT4wICYmIHByY21wKHB0YSxhW2ldKSkgewogICAgICAgIGdvb2RbKytzel09YVtpXTsKICAgIH0KICAgIGNvbXByZXNzKCk7CiAgICBhbGw9c3o7CiAgICBmb3IoaT0xO2k8PXN6O2krKykgYzFjM1tnb29kW2ldLmlkeF09aS0xOwogICAgZm9yKGk9MTtpPD1hbGw7aSsrKSBpdFtpXT0wOwogICAgc29ydChnb29kKzEsZ29vZCsxK3N6LGNtcGEpOwogICAgZm9yKGk9MTtpPD1zejtpKyspIHsKICAgICAgICBjM1tnb29kW2ldLmlkeF09Y291bnRfbGVzcyhnb29kW2ldKTsKICAgICAgICB1cGRhdGUoZ29vZFtpXS5jb2RlLDEpOwogICAgICAgIGMxW2dvb2RbaV0uaWR4XT1jMWMzW2dvb2RbaV0uaWR4XS1jM1tnb29kW2ldLmlkeF07CiAgICAgICAgKythbnNbYzFbZ29vZFtpXS5pZHhdXTsKICAgIH0KfQoKaW50IG1haW4oKSB7CiAgICAvL2lvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwogICAgLy9jaW4udGllKE5VTEwpOwogICAgZnJlb3BlbigidHJpYW5nbGVzLmluIiwiciIsc3RkaW4pOwogICAgZnJlb3BlbigidHJpYW5nbGVzLm91dCIsInciLHN0ZG91dCk7CiAgICBpbnQgaSxqOwoKICAgIHRlc3RzPTE7CiAgICAvL3NjYW5mKCIlZCIsICZ0ZXN0cyk7CiAgICAvL2Npbj4+dGVzdHM7CiAgICBmb3IoY3VycmVudF9jYXNlPTE7Y3VycmVudF9jYXNlPD10ZXN0cztjdXJyZW50X2Nhc2UrKykgewogICAgICAgIHNjYW5mKCIlZCIsICZuKTsKICAgICAgICBmb3IoaT0xO2k8PW47aSsrKSB7CiAgICAgICAgICAgIHNjYW5mKCIlZCAlZCIsICZhW2ldLngsICZhW2ldLnkpOwogICAgICAgICAgICBhW2ldLmlkeD1pOwogICAgICAgIH0KICAgICAgICBtZW1zZXQoYW5zLDAsc2l6ZW9mKGFucykpOwogICAgICAgIGZvcihpPTE7aTw9bjtpKyspIHsKICAgICAgICAgICAgZm9yKGo9MTtqPD1uO2orKykgewogICAgICAgICAgICAgICAgcHRhPWFbaV07CiAgICAgICAgICAgICAgICBwdGI9YVtqXTsKICAgICAgICAgICAgICAgIGlmKCFwcmNtcChwdGEscHRiKSkgY29udGludWU7CiAgICAgICAgICAgICAgICBzb2x2ZSgpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGZvcihpPTA7aTw9bi0zO2krKykgewogICAgICAgICAgICBwcmludGYoIiVkXG4iLCBhbnNbaV0pOwogICAgICAgIH0KCiAgICAgICAgTUVTU0FHRToKICAgICAgICBtZXNzYWdlKGN1cnJlbnRfY2FzZSk7CiAgICB9CgogICAgcmV0dXJuIDA7Cn0=