#include <bits/stdc++.h>
using namespace std;
int snm[1000000];
int get(int a)
{
    if(a==snm[a]) return a;
    snm[a]=get(snm[a]);
    return snm[a];
}
void uni(int a,int b)
{
    a=get(a);b=get(b);
    snm[a]=b;
}
int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    int n,m;
    cin >>n>>m;
    if(n==2)
    {
        if(m==0) cout<<"NO";
        else cout<<"YES\n1 2 1";
        return 0;
    }
    int st[n];
    for(int i=0;i<n;i++)
    {
        st[i]=0;
        snm[i]=i;
    }
    vector<pair<int,int> > reb;
    for(int i=0;i<m;i++)
    {
        int a,b;
        cin >>a>>b;
        a--;b--;
        st[a]++;st[b]++;
        reb.push_back({a,b});
        uni(a,b);
    }
    bool sv_st=true;
    for(int i=0;i<n;i++)
    {
        if(get(i)!=get(0)) sv_st=false;
        if(st[i]<2) sv_st=false;
    }
    if(!sv_st)
    {
        cout<<"NO";
        return 0;
    }
    vector<pair<int,int> > bbr;
    int kolv=0;int ind[n];
    for(int i=0;i<n;i++)
    {
        if(st[i]>2){ind[i]=kolv; kolv++;}
        else ind[i]=-1;
    }
    int indr[m];
    
    for(int i=0;i<m;i++)
    {
        if(st[reb[i].first]>2 && st[reb[i].second]>2) {indr[i]=bbr.size();bbr.push_back({ind[reb[i].first],ind[reb[i].second]});}
        else indr[i]=-1;
    }
    int q=kolv;
    int stpv[q];
    for(int i=0;i<n;i++)
    {
        if(ind[i]!=-1) stpv[ind[i]]=st[i];
    }
    bool use[bbr.size()];
    for(int i=0;i<bbr.size();i++) use[i]=false;
    int st2=1;
    for(int i=0;i<bbr.size();i++) st2*=2;
    st2=max(st2,1000000);
    for(int step=0;step<st2;step++)
    {
        int stpo[q];
        for(int i=0;i<q;i++) stpo[i]=stpv[i];
        for(int i=0;i<bbr.size();i++) 
        {
            if(!use[i])
            {
                stpo[bbr[i].first]--;
                stpo[bbr[i].second]--;
            }
        }
        bool wba=false;
        for(int i=0;i<q;i++) if(stpo[i]!=2) wba=true;
        if(!wba)
        {
            for(int i=0;i<q;i++) snm[i]=i;
            for(int i=0;i<bbr.size();i++) if(use[i]) uni(bbr[i].first,bbr[i].second);
            for(int i=0;i<q;i++) if(get(i)!=get(0)) wba=true;
            if(!wba)
            {
                cout<<"YES\n";
                vector<int> sos[n];
                for(int i=0;i<m;i++)
                {
                    if(indr[i]==-1 || use[indr[i]]) 
                    {
                        sos[reb[i].first].push_back(reb[i].second);
                        sos[reb[i].second].push_back(reb[i].first);
                    }
                }
                int pl=0;
                int la=sos[0][0];
                cout<<1<<' ';
                while(la!=0)
                {
                    cout<<la+1<<' ';
                    int ne=sos[la][0]+sos[la][1]-pl;
                    pl=la;la=ne;
                }
                cout<<1;
                return 0;
            }
        }
        int i=0;
        while(use[i]==true && i<bbr.size())
        {
            use[i]=false;
            i++;
        }
        if(i<bbr.size()) use[i]=true;
    }
    cout<<"NO";

}
