/*
TASK: convex
LANG: C
*/
#include <stdio.h>

#define MAXP 200
#define MODULE (1<<20)

typedef struct {
        int x,y;
} TPoint;

TPoint t[MAXP];
int dolna;
int mem[MAXP][MAXP][MAXP];
int n;
int sum = 0;
int dels[512];

int nass(int p1,int p2,int p3) {
    return (t[p2].x-t[p1].x)*t[p3].y+(t[p1].y-t[p2].y)*t[p3].x+t[p1].x*t[p2].y-t[p2].x*t[p1].y;
}

int dp(int prev,int last) {
int i;
    if (mem[dolna][prev][last]!=-1)
       return mem[dolna][prev][last];
    if (prev==dolna)
       mem[dolna][prev][last] = 0;
    else
       mem[dolna][prev][last] = 1;
    for (i=1;i<=n;i++)
      if (t[i].y>t[dolna].y)
        if (nass(prev,last,i)>0 && nass(last,i,dolna)>0) {
           mem[dolna][prev][last]+=dp(last,i);
           mem[dolna][prev][last]%=MODULE;
        }
    return mem[dolna][prev][last];
}

void add(int fact,int what) {
int i,c,x;
    for (i=1;i<=fact;i++) {
        c = i;
        x = 2;
        while (c!=1) {
              while (c%x==0 && x!=1) {
                    dels[x]+=what;
                    c/=x;
              }
              x++;
        }
    }
}

int comb(int n,int k) {
int res = 1,i,j;
    add(n,1);
    add(k,-1);
    add(n-k,-1);
    for (i=1;i<=400;i++)
        for (j=0;j<dels[i];j++)
            res = (res*i)%MODULE;
    return res;
}

int main () {
int i,j,k;
//    freopen ( "convex.in" , "r" , stdin);
    scanf("%d",&n);
    for (i=1;i<=n;i++)
        scanf("%d%d",&t[i].x,&t[i].y);
    if (n>200) {
        for (i=3;i<=n;i++)
            sum+=comb(n,i);
        printf("%d\n",sum);
        return 0;
    }        
    for (i=0;i<MAXP;i++)
        for(j=0;j<MAXP;j++)
           for(k=0;k<MAXP;k++)
                              mem[i][j][k] = -1;
    for (i=1;i<=n;i++)
        for (j=1;j<=n;j++) {
            if (t[i].y<=t[j].y) {
               dolna =i;
               sum+=dp(i,j);
               sum%=MODULE;
            }
        }
    printf("%d\n",sum);
    return 0;
}
