#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; using ll = long long; #define rep(cur,k) for (int cur = 0; cur < (int)(k); cur++) #define all(cnt) begin(cnt), end(cnt) const int INF = 1e9; int n, m; vector> g; vector dist; vector> s; int main() { while (cin >> n >> m) { g.assign(n, {}); for (int i = 0; i < m; i++) { int a, b; cin >> a >> b; --a; --b; g[a].emplace_back(b); g[b].emplace_back(a); } queue q; q.push(0); dist.assign(n, INF); dist[0] = 0; while (q.size()) { int cur = q.front(); q.pop(); for (auto &dst : g[cur]) { if (dist[dst] == INF) { q.push(dst); dist[dst] = dist[cur] + 1; } } } s.assign(n, {}); vector acc(n, false); for (int i = 0; i < n; i++) { for (auto j : g[i]) { if (dist[j] == 1) { acc[i] = true; s[i].insert(j); } } while (s[i].size() > 4) { auto it = s[i].begin(); ++it; ++it; s[i].erase(it); } } bool ok = false; for (int i = 0; i < n; i++) { for (auto &j : g[i]) { if (acc[i] && acc[j]){ auto S = s[i]; for (auto k : s[j]) S.insert(k); S.erase(i); S.erase(j); if (S.size() >= 2) ok = true; } } } cout << (ok ? "YES" : "NO") << endl; } }