#include using namespace std; typedef long long ll; typedef long double ld; typedef pair ii; typedef vector vi; typedef vector vvi; typedef vector vii; #define x first #define y second #define pb push_back #define eb emplace_back #define rep(i,a,b) for(auto i = (a); i < (b); ++i) #define REP(i,n) rep(i,0,n) #define all(v) begin(v), end(v) #define sz(v) ((int) (v).size()) #define rs resize struct dsu{ vi p; dsu(ll n) : p(n, -1){} ll find(ll i){ return p[i] < 0 ? i : p[i] = find(p[i]); } void unite(ll a, ll b){ if((a == find(a)) == (b == find(b))) return; if(p[a] > p[b]) swap(a,b); p[a] += p[b]; p[b] = a; } }; signed main(){ ll n, m; cin>>n; cin>>m; vector> leuk; vector> aantal; ll k, nu; for(ll x=0;x>k; aantal.push_back(make_pair(k,x)); vector vec; for(ll y = 0; y>nu; vec.push_back(nu - 1); } leuk.push_back(vec); } sort(aantal.begin(),aantal.end()); dsu unie = dsu(m); vector grootte, nummer; vector gehad; for(ll x=0;x vec; k = aantal[x].first; for(ll y = 0; y < k; y++){ j = leuk[i][y]; j = unie.find(j); if(!gehad[j]){ vec.push_back(j); gehad[j] = true; som += grootte[j]; } } if(som != k){ vector mag; for(ll y = 0; y < m; y++){ mag.push_back(true); } for(ll y = 0; y < k;y++){ mag[leuk[i][y]] = false; } for(ll y = 0; y < vec.size(); y++){ j = vec[y]; kan = false; j = nummer[j]; if(j == -1){ continue; } for(ll z = 0; z < leuk[j].size(); z++){ nu = leuk[j][z]; if(mag[nu]){ kan = true; break; } } if(kan){ cout << "YES" < 0){ j = unie.find(vec[0]); grootte[j] = k; nummer[j] = i; } } if(!gelukt){ cout << "NO" << endl; } return 0; }