#include <stdio.h>
int n;
int sgn(int n){
	if (n>0) return 1;
	if (n<0) return -1;
	return 0;
}
typedef struct {int x,y;}point;

typedef struct {int i,j,k,l;} quad;
typedef struct {int i,j;} edge;
int n;
point points[100000];
edge edges[100000];int edgen=0;int edgenum[10000];
quad quads[10000000];int quadn=0;
int included(edge e,quad q){
#define C(X,Y) (e.i==q.X&&e.j==q.Y)||(e.i==q.Y&&e.j==q.X)
	return C(i,j)||C(j,k)||C(k,l)||C(l,i);
}
int below(point a,point b,point c){
		int s= sgn((b.x -a.x)*(c.y-a.y)-(b.y -a.y)*(c.x-a.x) );
		if (s) return s;
		s=sgn(a.x-b.x);
		if (s) return s;
		return sgn(a.y-b.y);
}

int reduce(){
}
int convex(quad q){
	return below(points[q.i],points[q.j],points[q.k])>0&&below(points[q.j],points[q.k],points[q.l])>0&&below(points[q.k],points[q.l],points[q.i])>0&&below(points[q.l],points[q.i],points[q.j])>0;
}
int main(){int i,j,k,l,res=0;
	scanf("%i",&n);
	for (i=0;i<n;i++) for (j=i+1;j<n;j++){
		edges[edgen].i=i;edges[edgen].j=j;edgen++;
	}

	for(i=0;i<n;i++) scanf("%i%i",&points[i].x,&points[i].y);
	for(i=0;i<n;i++) for(j=i+1;j<n;j++) for(k=i+1;k<n;k++) for(l=i+1;l<n;l++){
		if (j==k||j==l||k==l)continue;
quads[quadn].i=i;quads[quadn].j=j;quads[quadn].k=k;quads[quadn].l=l;
		if (convex(quads[quadn]))quadn++;
	}
	int me=0;
	for (i=0;i<edgen;i++){edgenum[i]=0;
		for (j=0;j<quadn;j++) if (included(edges[i],quads[j])) edgenum[i]++;
		if (me<edgenum[i])me=edgenum[i];
	}
	printf("%i %i %i\n",me,quadn,quadn/me);
	/*while (quadn)reduce;
	printf ("%i %f\n",edgen,(edgen+0.0)/n/(n-1));*/
}
