#include #include #include using namespace std; set > QSET; bool isPeaceful( const vector &Q ) { vector LTRB(2*Q.size(), false); vector RTLB(2*Q.size(), false); for ( int i = 0; i < Q.size(); i++ ) { const int ltrb = Q.size() - 1 - i + Q[i]; const int rtlb = Q.size() - 1 - i + (Q.size() - 1 - Q[i]); if ( LTRB[ltrb] || RTLB[rtlb] ) return false; LTRB[ltrb] = true; RTLB[rtlb] = true; } return true; } void compute( vector &Q, const int i, const int j, const int k ) { const int ic = Q[i]; const int jc = Q[j]; const int kc = Q[k]; Q[i] = jc, Q[j] = kc, Q[k] = ic; if ( isPeaceful(Q) ) QSET.insert(Q); Q[i] = kc, Q[j] = ic, Q[k] = jc; if ( isPeaceful(Q) ) QSET.insert(Q); Q[i] = ic, Q[j] = jc, Q[k] = kc; } int main() { int N, row, col; vector Q; cin >> N; Q.resize(N); for ( int i = 0; i < N; i++ ) cin >> row >> col, Q[row-1] = col-1; QSET.insert(Q); for ( int i = 0; i < N; i++ ) for ( int j = i+1; j < N; j++ ) for ( int k = j+1; k < N; k++ ) compute(Q, i, j, k); cout << QSET.size()-1 << endl; return 0; }