#include <bits/stdc++.h>   using namespace std;   struct P {     double x, y;   } a[259];   long long f[259][259];   int n;   int read() {     long long x = 0, f = 1;     char ch = getchar();     while (!isdigit(ch)) {       if (ch ==  - ) f = -1;       ch = getchar();     }     while (isdigit(ch)) {       x = x * 10 + ch -  0 ;       ch = getchar();     }     return x * f;   }   double cross(P a, P b, P c) {     P x = (P){b.x - a.x, b.y - a.y};     P y = (P){c.x - a.x, c.y - a.y};     return x.x * y.y - x.y * y.x;   }   bool jud() {     double ans = 0;     for (int i = 2; i <= n; i++) ans += cross(a[1], a[i - 1], a[i]);     if (ans > 0) return 1;     return 0;   }   void rever() {     for (int i = 1; i <= n / 2; i++) swap(a[i], a[n - i + 1]);   }   int main() {     n = read();     for (int i = 1; i <= n; i++) scanf( %lf%lf , &a[i].x, &a[i].y);     if (jud()) rever();     for (int i = 1; i <= n; i++) f[i][i + 1] = 1;     for (int l = 1; l <= n - 1; l++)       for (int i = 1; i + l <= n; i++)         for (int j = i + 1; j < i + l; j++)           f[i][i + l] =               (f[i][i + l] + f[i][j] % 1000000007 * f[j][i + l] % 1000000007 *                                  (cross(a[i], a[j], a[i + l]) < 0 ? 1 : 0)) %               1000000007;     printf( %lld n , f[1][n] % 1000000007);     return 0;   }   