#include <bits/stdc++.h>
using namespace std;
#define forn(i,n) for(int i=0;i<int(n);i++)
#define forsn(i,s,n) for(int i=int(s);i<int(n);i++)
#define dforn(i,n) for(int i=int(n)-1;i>=0;i--)
#define dforsn(i,s,n) for(int i=int(n)-1;i>=int(s);i--)
#define fst first
#define snd second
#define pb push_back
#define eb emplace_back
#define sz(x) (int)x.size()
#define all(x) x.begin(), x.end()
typedef long long ll;
typedef vector<ll> vll;
typedef vector<int> vi;
typedef pair<int,int> ii;
const int INF=1e9;
const int MAX_N=1005;
int maxDepth[MAX_N];
vi adj[MAX_N];
int dfs0(int u, int p=-1){
int maxi=0;
for(int v:adj[u]) if(v!=p){
maxi=max(maxi,dfs0(v,u)+1);
}
return maxDepth[u]=maxi;
}
int dist[MAX_N],par[MAX_N];
void dfs(int u){
for(int v:adj[u]) if(v!=par[u]){
par[v]=u;
dist[v]=dist[u]+1;
dfs(v);
}
}
bool check(int n, int m){
if(m!=n-1) return false;
forn(u,n){
int cnt=0;
for(int v:adj[u]){
if(dfs0(v,u)>=2) cnt++;
}
if(cnt>2) return false;
}
return true;
}
vi findDiameter(int n){
par[0]=-1,dist[0]=0,dfs(0);
int u=0;
forsn(v,1,n) if(dist[v]>dist[u]) u=v;
par[u]=-1,dist[u]=0,dfs(u);
int u2=0;
forsn(v,1,n) if(dist[v]>dist[u2]) u2=v;
vi diameter{u2};
while(diameter.back()!=u){
diameter.pb(par[diameter.back()]);
}
return diameter;
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
int n,m;
cin>>n>>m;
forn(i,m){
int u,v;
cin>>u>>v;
--u,--v;
adj[u].pb(v);
adj[v].pb(u);
}
if(!check(n,m)){
cout<<"NO\n";
return 0;
}
cout<<"YES\n";
if(n<=2){
cout<<n<<'\n';
forn(i,n) cout<<"1 ";
cout<<'\n';
return 0;
}
vi d=findDiameter(n);
vi ret;
forsn(i,1,sz(d)-1){
int u=d[i];
ret.pb(u);
for(int v:adj[u]) if(sz(adj[v])!=1&&v!=d[i+1]&&v!=d[i-1]){
ret.pb(v);
ret.pb(u);
}
}
cout<<2*sz(ret)<<'\n';
forn(i,sz(ret)) cout<<ret[i]+1<<' ';
dforn(i,sz(ret)) cout<<ret[i]+1<<' ';
cout<<'\n';
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |