#include <iostream>
#include <vector>
#include <math.h>
#include <limits>
using namespace std ;
using ll = long long ;
using pt = pair<double, double> ;
using line = pair<pt, pt> ;
const auto Inf = numeric_limits<double>::infinity() ;
pt lineline(line a, line b) {
   auto [p1, p2] = a ;
   auto [p3, p4] = b ;
   auto [x1, y1] = p1 ;
   auto [x2, y2] = p2 ;
   auto [x3, y3] = p3 ;
   auto [x4, y4] = p4 ;
   auto d = (x1-x2)*(y3-y4)-(y1-y2)*(x3-x4) ;
   if (d == 0)
      return {Inf, Inf} ;
   return {((x1*y2-y1*x2)*(x3-x4)-(x1-x2)*(x3*y4-y3*x4))/d,
           ((x1*y2-y1*x2)*(y3-y4)-(y1-y2)*(x3*y4-y3*x4))/d} ;
}
double eps = 5e-12 ;
double d(pt &a, pt &b) {
   return hypot(a.first-b.first, a.second-b.second) ;
}
int inbounds(pt &p, line &a) {
   auto [p1, p2] = a ;
   auto [x1, y1] = p1 ;
   auto [x2, y2] = p2 ;
   auto [x, y] = p ;
   return x >= min(x1, x2)-eps && x <= max(x1, x2)+eps &&
          y >= min(y1, y2)-eps && y <= max(y1, y2)+eps ;
}
int segseg(line a, line b) {
   auto p = lineline(a, b) ;
   if (p.first == Inf) {
      return 0 ;
   }
   return inbounds(p, a) && inbounds(p, b) ;
}
vector<pt> poly ;
vector<line> v ;
int n ;
ll r = 0 ;
void recur(int lastlin, ll used, int togo) {
   if (togo == 0) {
      for (int j=1; j+2<(int)poly.size(); j++)
         if (segseg({poly[poly.size()-1], poly[0]}, {poly[j], poly[j+1]}))
            return ;
      r++ ;
      return ;
   }
   for (int i=0; i<n; i++)
      if (togo == 1 ? i == 0 : ((used >> i) & 1) == 0) {
         auto p = lineline(v[lastlin], v[i]) ;
         if (poly.size() > 0 && d(p, poly[poly.size()-1]) < eps)
            continue ;
         if (p.first != Inf) {
            int good = 1 ;
            for (int j=0; good && j+2<(int)poly.size(); j++) {
               if (segseg({poly[j], poly[j+1]}, {poly[poly.size()-1], p}))
                  good = 0 ;
            }
            if (good) {
               poly.push_back(p) ;
               recur(i, used | (1LL << i), togo-1) ;
               poly.pop_back() ;
            }
         }
      }
}
int main() {
   cin >> n ;
   v.resize(n) ;
   for (auto &[p1, p2] : v) {
      auto& [x1, y1] = p1 ;
      auto& [x2, y2] = p2 ;
      cin >> x1 >> y1 >> x2 >> y2 ;
   }
   recur(0, 1, n) ;
   if (r & 1)
      cout << "Odd?" << endl ;
   cout << (r>>1) << endl ;
}
