#include #include #include using namespace std; struct dot { int x; int y; }; const int maxval=10*10*10*10*10*10*10*10*10+7; int n,reachedm=0,visited[5]={}; dot dots[100000]; int a[5]; bool CheckRepeat() { int used[5],used2[5]; int rused=0; for( int i = 0; i < 5; i++ ) { for( int j = 0; j < rused; j++ ) { if( used[j]==dots[a[i]].x || used2[j] > a[i]) return false; } used2[rused] = a[i]; used[rused] = dots[a[i]].x; rused++; } return true; } void CheckM() { if( CheckRepeat() ) { if( dots[a[0]].y < dots[a[2]].y && dots[a[4]].y < dots[a[2]].y && dots[a[1]].y > dots[a[2]].y && dots[a[3]].y > dots[a[2]].y ) { reachedm++; if( reachedm == maxval ) reachedm=0; } } } void var(int p) { if(p == 6) { CheckM(); return; } for(int i = 0; i < n; i++) { a[p-1] = i; var(p+1); } } bool comp( dot s1, dot s2 ) { if( s1.x < s2.x ) return true; return false; } int main() { freopen("countm.in", "r", stdin); freopen("countm.out", "w", stdout); scanf("%d",&n); for( int i = 0; i < n; i++ ) scanf("%d%d",&dots[i].x,&dots[i].y); stable_sort( dots, dots+n, comp ); var(1); printf("%d",reachedm); return 0; }