fn.cpp
#include <bits/stdc++.h>
using namespace std;
int main() {
int N,M;
while(cin >> N >> M) {
vector< vector<int> > G(N);
vector<int> D(N,0);
vector<int> d3;
for(int i =0; i < M; i++){
int a,b;
cin >> a >> b;
G[--a].push_back(--b);
G[b].push_back(a);
D[a]++, D[b]++;}
int maxD =0;
for(int i =0; i < N; i++) {
if(D[i] == 3) d3.push_back(i);
maxD =max(maxD,D[i]);}
if(maxD > 3 || d3.size() > 42) {cout << "YES\n"; continue;}
if(maxD < 3) {cout << "NO\n"; continue;}
vector<int> comp(N,-1);
int c =0;
queue<int> q;
for(int k =0; k < N; k++) if(comp[k] == -1) {
q.push(k);
comp[k] =c;
while(!q.empty()) {
int a =q.front();
for(int i =0; i < G[a].size(); i++) if(comp[G[a][i]] == -1) {
comp[G[a][i]] =c;
q.push(G[a][i]);}
q.pop();}
c++;}
bool ok =false;
for(int i =0; i < d3.size(); i++) for(int j =0; j < d3.size(); j++) if(comp[d3[i]] == comp[d3[j]]) {
int com =0, a =d3[i], b =d3[j];
for(int k =0; k < 3; k++) for(int l =0; l < 3; l++) if(G[a][k] == G[b][l]) com++;
bool hr =false;
for(int k =0; k < 3; k++) if(G[a][k] == b) hr =true;
if(hr && com == 0) ok =true;
if(!hr && com <= 1) ok =true;}
if(ok) cout << "YES\n";
else cout << "NO\n";}
return 0;}