#include <cstdio>#include <algorithm>#include <cstring>#include <cstdlib>#include <iostream>#include <queue>using namespace std;inline int gi(){ char tmp=getchar();int ans=0; while(!isdigit(tmp)) tmp=getchar(); while(isdigit(tmp)){ ans = ans * 10 + tmp - '0'; tmp = getchar(); } return ans;}const int N = 2002000;struct Edg{ int v,nxt;}Edge[N<<1];int Head[N];inline void Add(int u,int v){ static int cnt = 0; Edge[++cnt].v=v;Edge[cnt].nxt=Head[u];Head[u]=cnt;}inline int lowbit(int x){return x&-x;}int F[N],D[N],Vis[N],C[N],Size[N],Id[N];int n;inline void Mark(int pos,int v){ while(pos <= n){ C[pos] += v; pos += lowbit(pos); }}inline int Sum(int pos){ int ans = 0 ; while(pos){ ans += C[pos]; pos -= lowbit(pos); } return ans;}int tot = 0;void Dfs(int pos,int fa){ Size[pos] = 1; Id[pos] = ++tot; D[pos] = D[fa]+1; for(int i=Head[pos];i;i=Edge[i].nxt){ int arr = Edge[i].v; if(arr == fa) continue; F[arr] += pos; Dfs(arr,pos); Size[pos] += Size[arr]; } return ;}signed main(){#ifdef TSUKIAKIOI freopen("data.in","r",stdin);#endif int m;n=gi(),m=gi(); for(int i=1;i<n;++i){ int a,b; a=gi(),b=gi(); Add(a,b);Add(b,a); } int remain = n - m; Vis[0] = 1; Dfs(n,0); for(int i=n;i>=1;--i){ if(Vis[i]) continue; int x = Sum(Id[i]); // 当前节点到联通块上有几个节点 if(D[i] - x <= remain){ remain -= (D[i]-x); //printf("Succussfully Add %d, extra nodes:%d\n",i,D[i]-x); int pos = i; int ed=0; while(!Vis[pos]){ Vis[pos] = 1; pos = F[pos]; if(pos) ed = pos; } pos = i; while(pos != ed){ Mark(Id[pos],1); Mark(Id[pos]+Size[pos],-1); pos = F[pos]; } } } for(int i=1;i<=n;++i) if(!Vis[i]) printf("%d ",i); return 0;}