#include using namespace std; #define rep(i,n) for (int i=0;i<(n);i++) #define rep2(i,a,b) for (int i=(a);i<(b);i++) #define rrep(i,n) for (int i=(n)-1;i>=0;i--) #define rrep2(i,a,b) for (int i=(b)-1;i>=(a);i--) #define all(a) (a).begin(),(a).end() typedef long long ll; typedef pair P; typedef vector vi; typedef vector

vp; typedef vector vll; // 入力に出現するすべての頂点が連結である、と仮定して解いています signed main() { std::ios::sync_with_stdio(false); std::cin.tie(0); int num_of_edge; cin >> num_of_edge; set

points; rep(i, num_of_edge) { int r1, c1, r2, c2; cin >> r1 >> c1 >> r2 >> c2; points.insert(P(r1, c1)); points.insert(P(r2, c2)); } // 連結成分にサイクルが 1個以下 であれば可能 // つまり、辺の本数 <= 頂点数 であれば可能 if (num_of_edge <= points.size()) { cout << "YES" << endl; } else { cout << "NO" << endl; } }