#include<bits/stdc++.h> using namespace std; typedef pair<int,int> P; vector<int> vec1[200010]; vector<int> vec2[200010]; vector<P> ans; queue<int> que; int color[200010]; int n,m,D,cnt; bool cmp(int a,int b) { return color[a]<color[b]; } void bfs1(int s) { que.push(s); color[s]=cnt; while(!que.empty()) { int now=que.front(); que.pop(); for(int i=0;i<vec1[now].size();i++) { int to=vec1[now][i]; if(to==1||color[to]!=0) continue; ans.push_back(P(now,to)); que.push(to); color[to]=cnt; } } } void bfs2(int s) { que.push(s); color[s]=1; while(!que.empty()) { int now=que.front(); que.pop(); for(int i=0;i<vec2[now].size();i++) { int to=vec2[now][i]; if(color[to]!=0) continue; ans.push_back(P(now,to)); que.push(to); color[to]=1; } } } int main() { scanf("%d%d%d",&n,&m,&D); while(m--) { int u,v; scanf("%d%d",&u,&v); vec1[u].push_back(v); vec1[v].push_back(u); } for(int i=2;i<=n;i++) { if(color[i]==0) { cnt++; bfs1(i); } } if(cnt>D||vec1[1].size()<D) { printf("NO\n"); return 0; } sort(vec1[1].begin(),vec1[1].end(),cmp); for(int i=0;i<vec1[1].size()&&D;i++) { int to=vec1[1][i]; if( (i==0)||(i>0&&color[ vec1[1][i-1] ]!=color[to])) { ans.push_back(P(1,to)); D--; } } for(int i=1;i<vec1[1].size()&&D;i++) { int to=vec1[1][i]; if( (i==0)||(i>0&&color[ vec1[1][i-1] ]==color[to])) { ans.push_back(P(1,to)); D--; } } for(int i=0;i<ans.size();i++) { P pp=ans[i]; int now=pp.first; int to=pp.second; vec2[now].push_back(to); vec2[to].push_back(now); } ans.clear(); for(int i=1;i<=n;i++) color[i]=0; bfs2(1); printf("YES\n"); for(int i=0;i<ans.size();i++) { printf("%d %d\n",ans[i].first,ans[i].second); } }