#include #define rep(i,a,b) for(int i=int(a);i P; int INF = (1LL << 30) - 1; int MOD = 1e9+7; main(){ int field[110][110] = {}; int nodep[110][110] = {}; int N; cin >> N; int V[N][4]; rep(i,0,N){ cin >> V[i][0] >> V[i][1] >> V[i][2] >> V[i][3]; field[ V[i][0] ][ V[i][1] ]++; field[ V[i][2] ][ V[i][3] ]++; //int dif = (V[i][0] - V[i][2] + 3)/2 + (V[i][1] - V[i][3] + 3)*2; int dif = 0; if(V[i][0] != V[i][2])dif = V[i][0] > V[i][2] ? 1 : 2; else dif = V[i][1] > V[i][3] ? 4 : 8; nodep[ V[i][0] ][ V[i][1] ] += dif; nodep[ V[i][2] ][ V[i][3] ] += (dif&2||dif&8 ? dif/2 : dif*2); } /* cout << endl; rep(i,1,12)rep(j,1,12){ cout << field[i][j] << " \n"[j==11]; } cout << endl; */ while(1){ bool update = 0; rep(i,1,101)rep(j,1,101){ if(field[i][j] == 1){ update = 1; int dy[] = {-1,1,0,0} , dx[] = {0,0,-1,1}; int ind = (int)log2(nodep[i][j]); int np = nodep[i][j]; field[ i + dy[ind] ][ j + dx[ind] ]--; field[i][j]--; nodep[ i + dy[ind] ][ j + dx[ind] ] -= (np&2||np&8 ? np/2 : np*2); nodep[i][j] = 0; } } /* rep(i,1,12)rep(j,1,12){ cout << field[i][j] << " \n"[j==11]; } */ if(!update)break; } //最大値が3以上ならNG int maxi = 0; rep(i,1,101)rep(j,1,101){ maxi = max(maxi, field[i][j]); } if(maxi >= 3) cout << "NO" << endl; else cout << "YES" << endl; }