#include #define rep(i,n) for(ll i=0;i<(ll)(n);i++) #define Yes cout << "Yes" << "\n" #define No cout << "No" << "\n" #define rtr0 return(0) #define all(x) x.begin(), x.end() using namespace std; //#include //using namespace atcoder; //using mint=static_modint<998244353>; //using mint=static_modint<1000000007>; ////using mint=modint; //#pragma GCC target("avx2") //#pragma GCC optimize("O3") //#pragma GCC optimize("unroll-loops") using ll=long long; using l3=__int128; using ull=unsigned long long; using ld=long double; using P=pair; const ld PI=acos(-1); templatebool chmin(T&a,T b){if(a>b){a=b;return true;}return false;} templatebool chmax(T&a,T b){if(a dx={1,0,-1,0}; const vector dy={0,1,0,-1}; const int inf=1001001001; const ll INF=1001001001001001001; ll mod=998244353; void solve(){ ll n,m;cin>>n>>m; vector> g(n); vector d(n); rep(i,m){ ll u,v;cin>>u>>v;u--;v--; g[u].insert(v); g[v].insert(u); d[u]++; d[v]++; } priority_queue,greater> pq; vector> pa(n,vector(3,-1)); rep(i,n)if(d[i]==3)pq.push(i); vector s; while(!pq.empty()){ auto id=pq.top();pq.pop(); s.push_back(id); ll i=0; for(auto nex:g[id]){ pa[id][i]=nex; d[nex]--; if(d[nex]==3){ g[nex].erase(id); pq.push(nex); } i++; } } reverse(all(s)); vector ans(n); rep(i,n){ ll id=0; set st; rep(j,4)st.insert(j+1); rep(j,4)if(st.count(ans[pa[s[i]][j]]))st.erase(ans[pa[s[i]][j]]); ans[s[i]]=*st.begin(); } cout<<"Yes"<>t; rep(i,t)solve(); }