#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<fstream>
#include<map>
#include<ctime>
#include<set>
#include<queue>
#include<cmath>
#include<vector>
#include<bitset>
#include<functional>
#define x first
#define y second
#define mp make_pair
#define pb push_back
#define REP(i,l,r) for((i)=(l);(i)<=(r);++(i))
#define REP2(i,l,r) for((i)=(l);(i)!=(r);++(i))
using namespace std;
typedef long long LL;
typedef double ld;
const int MAX=1000+10;
const int NUM=MAX*MAX;
int n;
struct Point
{
int x,y;
}d[MAX];
int tot;
int num[NUM];
ld ang[NUM];
int val[NUM],ans[NUM];
int cmp(int a,int b)
{
return ang[a]<ang[b];
}
ld Mode(ld a)
{
while(a<0)
a+=2*M_PI;
while(a>2*M_PI)
a-=2*M_PI;
return a;
}
int que[MAX][MAX];
int head[MAX],end[MAX];
void add(int* que,int& head,int& end,int p)
{
while(end>head && ans[ que[end-1] ] <= ans[p] )
end--;
que[end++]=p;
}
int ask(int * que,int& head,int& end,int p)
{
while(head<end && Mode( ang[p]-ang[que[head]] ) >=M_PI)
head++;
if(head<end)
return ans[que[head]];
else return -1;
}
int chaji(const Point& s,const Point& a,const Point& b)
{
return (a.x-s.x)*(b.y-s.y)-(a.y-s.y)*(b.x-s.x);
}
void Work()
{
int _i;
REP(_i,1,n)
head[_i]=end[_i]=0;
REP(_i,1,tot*2)
{
int u=num[(_i-1)%tot+1];
int a=(u-1)/n+1;
int b=(u-1)%n+1;
if(a==2 && b==1)
continue;
if(_i>tot && ( chaji(d[1],d[2],d[b])<0 || chaji(d[1],d[2],d[a])<0 ) )
continue;
int val=ask(que[a],head[a],end[a],u);
if(a==1 && b==2)
val=0;
if(val!=-1)
{
ans[u]=max(ans[u], val+1 ) ;
if(b!=1)
add(que[b],head[b],end[b],u);
}
}
}
int main()
{
// freopen("input.txt","r",stdin);freopen("output.txt","w",stdout);
int i,j;
scanf("%d",&n);
REP(i,1,n)
scanf("%d%d",&d[i].x,&d[i].y);
REP(i,1,n)
REP(j,1,n)
if(i!=j)
{
if(chaji(d[i],d[j],d[1])>0)
continue;
++tot;
num[tot]=(i-1)*n+j;
ang[ num[tot] ]=atan2(d[j].y-d[i].y,d[j].x-d[i].x);
}
ld tmp=ang[2];
REP(i,1,n*n)
ang[i]=Mode( tmp-ang[i] );
REP(i,1,n*n)
if(i!=2 && abs( ang[i] )<1e-6)
ang[i]=2*M_PI;
sort(num+1,num+tot+1,cmp);
memset(ans,-1,sizeof ans);
Work();
int answer=1;
REP(i,2,n)
answer=max(answer,ans[(i-1)*n+1]);
printf("%d\n",answer-1);
return 0;
}
I2luY2x1ZGU8Y3N0ZGlvPgojaW5jbHVkZTxjc3RkbGliPgojaW5jbHVkZTxjc3RyaW5nPgojaW5jbHVkZTxhbGdvcml0aG0+CiNpbmNsdWRlPGlvc3RyZWFtPgojaW5jbHVkZTxmc3RyZWFtPgojaW5jbHVkZTxtYXA+CiNpbmNsdWRlPGN0aW1lPgojaW5jbHVkZTxzZXQ+CiNpbmNsdWRlPHF1ZXVlPgojaW5jbHVkZTxjbWF0aD4KI2luY2x1ZGU8dmVjdG9yPgojaW5jbHVkZTxiaXRzZXQ+CiNpbmNsdWRlPGZ1bmN0aW9uYWw+CiNkZWZpbmUgeCBmaXJzdAojZGVmaW5lIHkgc2Vjb25kCiNkZWZpbmUgbXAgbWFrZV9wYWlyCiNkZWZpbmUgcGIgcHVzaF9iYWNrCiNkZWZpbmUgUkVQKGksbCxyKSBmb3IoKGkpPShsKTsoaSk8PShyKTsrKyhpKSkKI2RlZmluZSBSRVAyKGksbCxyKSBmb3IoKGkpPShsKTsoaSkhPShyKTsrKyhpKSkKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnR5cGVkZWYgbG9uZyBsb25nIExMOwp0eXBlZGVmIGRvdWJsZSBsZDsKCmNvbnN0IGludCBNQVg9MTAwMCsxMDsKY29uc3QgaW50IE5VTT1NQVgqTUFYOwoKaW50IG47CgpzdHJ1Y3QgUG9pbnQKewoJaW50IHgseTsKfWRbTUFYXTsKCmludCB0b3Q7CmludCBudW1bTlVNXTsKbGQgYW5nW05VTV07CmludCB2YWxbTlVNXSxhbnNbTlVNXTsKCmludCBjbXAoaW50IGEsaW50IGIpCnsKCXJldHVybiBhbmdbYV08YW5nW2JdOwp9CgpsZCBNb2RlKGxkIGEpCnsKCXdoaWxlKGE8MCkKCQlhKz0yKk1fUEk7Cgl3aGlsZShhPjIqTV9QSSkKCQlhLT0yKk1fUEk7CglyZXR1cm4gYTsKfQoKaW50IHF1ZVtNQVhdW01BWF07CmludCBoZWFkW01BWF0sZW5kW01BWF07Cgp2b2lkIGFkZChpbnQqIHF1ZSxpbnQmIGhlYWQsaW50JiBlbmQsaW50IHApCnsKCXdoaWxlKGVuZD5oZWFkICYmIGFuc1sgcXVlW2VuZC0xXSBdIDw9IGFuc1twXSApCgkJZW5kLS07CglxdWVbZW5kKytdPXA7Cn0KCmludCBhc2soaW50ICogcXVlLGludCYgaGVhZCxpbnQmIGVuZCxpbnQgcCkKewoJd2hpbGUoaGVhZDxlbmQgJiYgTW9kZSggYW5nW3BdLWFuZ1txdWVbaGVhZF1dICkgPj1NX1BJKQoJCWhlYWQrKzsKCWlmKGhlYWQ8ZW5kKQoJCXJldHVybiBhbnNbcXVlW2hlYWRdXTsKCWVsc2UgcmV0dXJuIC0xOwp9CgppbnQgY2hhamkoY29uc3QgUG9pbnQmIHMsY29uc3QgUG9pbnQmIGEsY29uc3QgUG9pbnQmIGIpCnsKCXJldHVybiAoYS54LXMueCkqKGIueS1zLnkpLShhLnktcy55KSooYi54LXMueCk7Cn0KCnZvaWQgV29yaygpCnsKCWludCBfaTsKCVJFUChfaSwxLG4pCgkJaGVhZFtfaV09ZW5kW19pXT0wOwoJUkVQKF9pLDEsdG90KjIpCgl7CgkJaW50IHU9bnVtWyhfaS0xKSV0b3QrMV07CgkJaW50IGE9KHUtMSkvbisxOwoJCWludCBiPSh1LTEpJW4rMTsKCQlpZihhPT0yICYmIGI9PTEpCgkJCWNvbnRpbnVlOwoJCWlmKF9pPnRvdCAmJiAoIGNoYWppKGRbMV0sZFsyXSxkW2JdKTwwIHx8IGNoYWppKGRbMV0sZFsyXSxkW2FdKTwwICkgKQoJCQljb250aW51ZTsKCQlpbnQgdmFsPWFzayhxdWVbYV0saGVhZFthXSxlbmRbYV0sdSk7CgkJaWYoYT09MSAmJiBiPT0yKQoJCQl2YWw9MDsKCQlpZih2YWwhPS0xKQoJCXsKCQkJYW5zW3VdPW1heChhbnNbdV0sIHZhbCsxICkgOwoJCQlpZihiIT0xKQoJCQkJYWRkKHF1ZVtiXSxoZWFkW2JdLGVuZFtiXSx1KTsKCQl9Cgl9Cn0KCmludCBtYWluKCkKewovLwlmcmVvcGVuKCJpbnB1dC50eHQiLCJyIixzdGRpbik7ZnJlb3Blbigib3V0cHV0LnR4dCIsInciLHN0ZG91dCk7CglpbnQgaSxqOwoJc2NhbmYoIiVkIiwmbik7CglSRVAoaSwxLG4pCgkJc2NhbmYoIiVkJWQiLCZkW2ldLngsJmRbaV0ueSk7CglSRVAoaSwxLG4pCgkJUkVQKGosMSxuKQoJCQlpZihpIT1qKQoJCQl7CgkJCQlpZihjaGFqaShkW2ldLGRbal0sZFsxXSk+MCkKCQkJCQljb250aW51ZTsKCQkJCSsrdG90OwoJCQkJbnVtW3RvdF09KGktMSkqbitqOwoJCQkJYW5nWyBudW1bdG90XSBdPWF0YW4yKGRbal0ueS1kW2ldLnksZFtqXS54LWRbaV0ueCk7CgkJCX0KCWxkIHRtcD1hbmdbMl07CglSRVAoaSwxLG4qbikKCQlhbmdbaV09TW9kZSggdG1wLWFuZ1tpXSApOwoJUkVQKGksMSxuKm4pCgkJaWYoaSE9MiAmJiBhYnMoIGFuZ1tpXSApPDFlLTYpCgkJCWFuZ1tpXT0yKk1fUEk7Cglzb3J0KG51bSsxLG51bSt0b3QrMSxjbXApOwoJbWVtc2V0KGFucywtMSxzaXplb2YgYW5zKTsKCVdvcmsoKTsKCWludCBhbnN3ZXI9MTsKCVJFUChpLDIsbikKCQlhbnN3ZXI9bWF4KGFuc3dlcixhbnNbKGktMSkqbisxXSk7CglwcmludGYoIiVkXG4iLGFuc3dlci0xKTsKCXJldHVybiAwOwp9Cg==