#include using namespace std; #define REP(i,a,n) for(int i=(a); i<(int)(n); i++) #define rep(i,n) REP(i,0,n) #define FOR(it,c) for(__typeof((c).begin()) it=(c).begin(); it!=(c).end(); ++it) #define ALLOF(c) (c).begin(), (c).end() typedef long long ll; typedef unsigned long long ull; #define MAX_V 305 int V; vector G[MAX_V]; int match[MAX_V]; bool used[MAX_V]; void init_graph(){ for(int i=0; i> N; int n = 0; map,int> vertex; vector< pair > edge; rep(i,N){ int a, b, c, d; cin >> a >> b >> c >> d; if(vertex.count(make_pair(a,b)) == 0) vertex[make_pair(a,b)] = n++; if(vertex.count(make_pair(c,d)) == 0) vertex[make_pair(c,d)] = n++; int va = vertex[make_pair(a,b)]; int vb = vertex[make_pair(c,d)]; edge.push_back(make_pair(va,vb)); } V = n + edge.size(); rep(i,edge.size()){ int e = n+i; int va = edge[i].first; int vb = edge[i].second; add_edge(e,va); add_edge(e,vb); } int ret = bipartite_matching(); if(ret == edge.size()) cout << "YES" << endl; else cout << "NO" << endl; return 0; }