func_code_string: #include <bits/stdc++.h>   const int N = 209, MOD = 1000000007;   long long f[N][N], area[N][N];   struct point {     long long x, y;     point(const long long _x = 0, const long long _y = 0) : x(_x), y(_y) {}   } p[N];   int n;   inline int sign(long long x) { return x < 0 ? -1 : x > 0; }   inline long long cpr(const point &a, const point &b, const point &c) {     return (b.x - a.x) * (c.y - a.y) - (c.x - a.x) * (b.y - a.y);   }   inline bool cross(point &u, point &v, point &a, point &b) {     if (std::max(u.x, v.x) < std::min(a.x, b.x) ||         std::min(u.x, v.x) > std::max(a.x, b.x))       return false;     if (std::max(u.y, v.y) < std::min(a.x, b.y) ||         std::min(u.y, v.y) > std::max(a.y, b.y))       return false;     if (sign(cpr(u, v, a)) * sign(cpr(u, v, b)) <= 0 &&         sign(cpr(a, b, u)) * sign(cpr(a, b, v)) <= 0)       return true;     return false;   }   bool check(int i, int j) {     if (i + 1 == j || i == 1 && j == n) return true;     if (sign(cpr(p[i], p[j], p[i + 1])) * sign(cpr(p[i], p[j], p[i - 1])) > 0)       return false;     for (int k = 1; k <= n; ++k)       if (k != i && k % n + 1 != i && k != j && k % n + 1 != j) {         if (cross(p[i], p[j], p[k], p[k + 1])) return false;       } else if (!cpr(p[i], p[j], p[(k == i || k == j) ? k + 1 : k]))         return false;     return true;   }   long long F(int i, int j) {     if (f[i][j] != -1) return f[i][j];     if (i + 1 == j) return 1;     f[i][j] = 0;     for (int k = i + 1; k < j; ++k)       if (cpr(p[i], p[j], p[k]) > 0) f[i][j] += F(i, k) * F(k, j) % MOD;     f[i][j] %= MOD;     return f[i][j];   }   int main() {     memset(f, -1, sizeof f);     scanf( %d , &n);     long long S = 0;     for (int i = 1; i <= n; ++i) scanf( %I64d%I64d , &p[i].x, &p[i].y);     p[n + 1] = p[1];     p[0] = p[n];     for (int i = 1; i <= n; ++i) S += cpr(point(0, 0), p[i], p[i + 1]);     if (S > 0) std::reverse(p + 1, p + 1 + n);     p[n + 1] = p[1];     p[0] = p[n];     printf( %I64d n , F(1, n));   }   