structnode{ int Next,y; }Pth[2000005]; int head[1000005],cnt; voidadd(int x,int y){ cnt++; Pth[cnt]={head[x],y}; head[x]=cnt; }
int n,k,t; int fa[1000005][20],d[1000005]; bool checked[1000005];
voidbfs(){ queue <int> q; q.push(n); d[n]=1; while (!q.empty()){ int x=q.front(); q.pop(); for (int i=head[x];i;i=Pth[i].Next){ int y=Pth[i].y; if (d[y]) continue; d[y]=d[x]+1; fa[y][0]=x; for (int j=1;j<=t;++j){ fa[y][j]=fa[fa[y][j-1]][j-1]; } q.push(y); } } }
intcalc(int p){ if (checked[p]) return0; int rp=p; for (int i=t;i>=0;--i){ if (fa[p][i] && !checked[fa[p][i]]){ p=fa[p][i]; } } return d[rp]-d[p]+1; } voidtag(int p){ while (!checked[p]){ k--; checked[p]=1; p=fa[p][0]; } }
intmain(){ cin>>n>>k; t=log(n)/log(2); k=n-k; for (int i=1;i<n;++i){ int x,y; scanf("%d%d",&x,&y); add(x,y); add(y,x); } bfs(); checked[n]=1; k--; for (int i=n-1;i>=1;--i){ if (calc(i)<=k){ tag(i); } } for (int i=1;i<=n;++i){ if (!checked[i]) printf("%d ",i); } puts(""); return0; }