all.cpp
#include <algorithm>
#include <cctype>
#include <cmath>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <list>
#include <map>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <string>
#include <utility>
#include <vector>
using namespace std;
#define DEBUG(x) cerr << ">> " << #x << ": " << x << endl;
#define REP(i,a) for (int i =0; i < (a);++i)
#define FOR(i,a,b) for (int i = (a); i <= (b); ++i)
int num, edgecount;
int* degrees;
int main() {
while (scanf("%d%d", &num, &edgecount) != EOF)
{
degrees = new int[num];
for (int j = 0; j < num; j++)
{
degrees[j] = 0;
}
for (int i = 0; i < edgecount; i++)
{
int from, to;
scanf("%d%d", &from, &to);
degrees[from-1]++;
degrees[to-1]++;
}
int deg4 = 0;
int deg3 = 0;
int deg2 = 0;
int deg1 = 0;
for (int j = 0; j < num; j++)
{
switch(degrees[j])
{
case 1: deg1++; break;
case 2: deg2++; break;
case 3: deg3++; break;
case 4: deg4++; break;
default: deg4++; break;
}
}
if (deg4 > 0) { printf("YES\n"); }
else if (deg3 < 0) { printf("NO\n"); }
else
{
if (deg3 >= 2) { printf("YES\n"); } else { printf("NO\n"); }
}
delete[] degrees;
}
return 0;
}