#include <iostream>
#include<bits/stdc++.h>
using namespace std;
void dfs(vector<vector<int>>&graphs,vector<bool>&vis,int i){
vis[i]=true;
for(auto j:graphs[i]){
if(!vis[j]){
dfs(graphs,vis,j);
}
}
}
int main() {
int n,m;
cin>>n>>m;
vector<vector<int>>graphs(n+1);
for(int i=0;i<m;i++){
int a,b;
cin>>a>>b;
graphs[a].push_back(b);
graphs[b].push_back(a);
}
vector<bool>vis(n+1,false);
vector<int>res;
int ans=0;
for(int i=1;i<=n;i++){
if(!vis[i]){
ans++;
res.push_back(i);
dfs(graphs,vis,i);
}
}
if(ans==1){
cout<<0<<endl;
}
else{
cout<<ans-1<<endl;
for(int i=0;i<res.size()-1;i++){
cout<<res[i]<<" "<<res[i+1]<<endl;
}
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZTxiaXRzL3N0ZGMrKy5oPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdm9pZCBkZnModmVjdG9yPHZlY3RvcjxpbnQ+PiZncmFwaHMsdmVjdG9yPGJvb2w+JnZpcyxpbnQgaSl7CgkKCXZpc1tpXT10cnVlOwoJCglmb3IoYXV0byBqOmdyYXBoc1tpXSl7CgkJaWYoIXZpc1tqXSl7CgkJCWRmcyhncmFwaHMsdmlzLGopOwoJCX0KCX0KfQoKaW50IG1haW4oKSB7CglpbnQgbixtOwoJY2luPj5uPj5tOwoJCgl2ZWN0b3I8dmVjdG9yPGludD4+Z3JhcGhzKG4rMSk7Cglmb3IoaW50IGk9MDtpPG07aSsrKXsKCQlpbnQgYSxiOwoJCWNpbj4+YT4+YjsKCQlncmFwaHNbYV0ucHVzaF9iYWNrKGIpOwoJCWdyYXBoc1tiXS5wdXNoX2JhY2soYSk7Cgl9CgkKCXZlY3Rvcjxib29sPnZpcyhuKzEsZmFsc2UpOwoJdmVjdG9yPGludD5yZXM7CglpbnQgYW5zPTA7CgkKCWZvcihpbnQgaT0xO2k8PW47aSsrKXsKCQlpZighdmlzW2ldKXsKCQkJYW5zKys7CgkJCXJlcy5wdXNoX2JhY2soaSk7CgkJCWRmcyhncmFwaHMsdmlzLGkpOwoJCX0KCX0KCQoJaWYoYW5zPT0xKXsKCQljb3V0PDwwPDxlbmRsOwoJfQoJCgllbHNlewoJY291dDw8YW5zLTE8PGVuZGw7Cglmb3IoaW50IGk9MDtpPHJlcy5zaXplKCktMTtpKyspewoJCWNvdXQ8PHJlc1tpXTw8IiAiPDxyZXNbaSsxXTw8ZW5kbDsKCX0KCX0KCQoJcmV0dXJuIDA7Cn0=