fn.cpp
#include <stdio.h>
#include <vector>
using namespace std;
vector <int> v;
vector <int> un;
vector <int> vysl;
vector <int> velk;
int find(int a){
while(un[a]!=a){
a = un[a];
}
return a;
}
void uni(int a, int b){
int aa = find(a);
int bb = find(b);
if(aa!=bb){
if(velk[aa] <= velk[bb]){
un[aa] = bb;
velk[bb] += velk[aa];
}
else{
un[bb] = aa;
velk[aa] += velk[bb];
}
}
}
int main(){
int n,m,a,b;
int uspech = 0;
while(scanf("%d %d", &n,&m) == 2){
v.clear();
un.clear();
vysl.clear();
//vector<int> h(n);
for(int i=0; i<n; i++){
v.push_back(0);
un.push_back(i);
vysl.push_back(0);
velk.push_back(1);
//h[i]=0;
}
for(int i = 0; i<m; i++){
scanf("%d %d", &a,&b);
a--;
b--;
v[a]++;
v[b]++;
uni(a,b);
}
for(int i=0; i<n; i++){
int koren;
if(v[i]==1){
koren = find(i);
vysl[koren]++;
}
if(vysl[koren] >= 4){
uspech = 1;
}
}
/*
printf("v: ");
for(int i=0; i<n; i++){
printf("%d ", v[i]);
}
printf("\n");
printf("un: ");
for(int i=0; i<n; i++){
printf("%d ", un[i]);
}
printf("\n");
printf("vysl: ");
for(int i=0; i<n; i++){
printf("%d ", vysl[i]);
}
printf("\n");
*/
if(uspech == 1){
printf("YES\n");
}
else
{
printf("NO\n");
}
}
return 0;
}