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

#define N	512
#define M	1048576

struct ps {
	int x, y;
};

struct ps p[N];
struct ps c[N];
double cx, cy;
int n;

int pt[N][N];
int s[N];

int l[N];
int lc;

void calc_pt() {
	int i, j;

	for (i = 0; i < N; i++) {
		pt[i][0] = 1;
		for (j = 1; j <= i; j++) {
			pt[i][j] = (pt[i-1][j] + pt[i-1][j-1])%M;
			s[i] += pt[i][j];
			s[i] %= M;
                }
        }
	
}

int is_left(struct ps a, struct ps b, struct ps c) {
	double aa, ac;

	aa = atan2(a.y-b.y, a.x-b.x);
	ac = atan2(c.y-b.y, c.x-b.x);

	if (aa > ac)
		return 1;
        return -1;
}

int cmpp(const void *a, const void *b) {
	double aa, ab;

	aa = atan2(((struct ps*)a)->y - cy, ((struct ps*)a)->x - cx);
	ab = atan2(((struct ps*)b)->y - cy, ((struct ps*)b)->x - cx);
	if (aa < ab)
		return -1;
        else return 1;
}

void read_data() {
	int i;
	
	scanf("%d", &n);

	for (i = 0; i < n; i++)
		scanf("%d%d", &p[i].x, &p[i].y);
}

void solve() {
	int i, j, k;
	int pc;
	int r;

	r = 0;
	
	for (i = 0; i < n - 2; i++) {
		for (j = 0; i+j < n; j++)
			c[j] = p[i+j];
                pc = j;
                cx = p[i].x;
		cy = p[i].y;
		qsort(c+1, pc-1, sizeof(struct ps), cmpp);

		for (j = 1; j < pc; j++) {
			l[0] = 0;
			l[1] = j;
			lc = 2;

			for (k = j+1; k < pc; k++) {
				while (is_left(c[k], c[l[lc-2]], c[l[lc-1]]) < 0)
					lc--;
                                l[lc++] = k;
				r++;
				r += s[lc-3];
				r %= M;
			}
		}
	}

	printf("%d\n", r);
}

int main() {
	calc_pt();
	read_data();
	solve();
	return 0;
}
