#include <iostream>
#include <unordered_map>
#include <vector>
using namespace std;
int visited[1000001];
void DFS(unordered_map<int,unordered_map<int,int> >& Map,int*visited,int i)
{
//cout<<"i="<<i<<endl;
visited[i]=1;
for(auto it=Map[i].begin();it!=Map[i].end();it++)
{
if(visited[it->first] == 0)
{
DFS(Map,visited,it->first);
}
}
}
int main() {
int n,m;
cin>>n>>m;
unordered_map<int,unordered_map<int,int> > Map;
for(int i=0;i<m;i++)
{
int x,y;
cin>>x>>y;
Map[x-1][y-1]=1;
Map[y-1][x-1]=1;
}
for(int i=0;i<n;i++)
{
visited[i]=0;
}
int count1=0;
vector<int> bridges;
for(int i=0;i<n;i++)
{
if(visited[i] == 0)
{
bridges.push_back(i+1);
DFS(Map,visited,i);
count1++;
}
}
cout<<bridges.size()-1<<endl;
for(int i=0;i<bridges.size()-1;i++)
{
cout<<bridges[i]<<" "<<bridges[i+1]<<endl;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KI2luY2x1ZGUgPHZlY3Rvcj4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmludCB2aXNpdGVkWzEwMDAwMDFdOwoKdm9pZCBERlModW5vcmRlcmVkX21hcDxpbnQsdW5vcmRlcmVkX21hcDxpbnQsaW50PiA+JiBNYXAsaW50KnZpc2l0ZWQsaW50IGkpCnsKCS8vY291dDw8Imk9Ijw8aTw8ZW5kbDsKCXZpc2l0ZWRbaV09MTsKCQoJZm9yKGF1dG8gaXQ9TWFwW2ldLmJlZ2luKCk7aXQhPU1hcFtpXS5lbmQoKTtpdCsrKQoJewoJCWlmKHZpc2l0ZWRbaXQtPmZpcnN0XSA9PSAwKQoJCXsKCQkJREZTKE1hcCx2aXNpdGVkLGl0LT5maXJzdCk7CgkJfQoJfQp9CgoKaW50IG1haW4oKSB7CgoJaW50IG4sbTsKCWNpbj4+bj4+bTsKCQoJdW5vcmRlcmVkX21hcDxpbnQsdW5vcmRlcmVkX21hcDxpbnQsaW50PiA+IE1hcDsKCWZvcihpbnQgaT0wO2k8bTtpKyspCgl7CgkJaW50IHgseTsKCQljaW4+Png+Pnk7CgkJTWFwW3gtMV1beS0xXT0xOwoJCU1hcFt5LTFdW3gtMV09MTsKCX0KCQoJZm9yKGludCBpPTA7aTxuO2krKykKCXsKCQl2aXNpdGVkW2ldPTA7Cgl9CgkKCWludCBjb3VudDE9MDsKCXZlY3RvcjxpbnQ+IGJyaWRnZXM7Cglmb3IoaW50IGk9MDtpPG47aSsrKQoJewoJCWlmKHZpc2l0ZWRbaV0gPT0gMCkKCQl7CgkJCWJyaWRnZXMucHVzaF9iYWNrKGkrMSk7CgkJCURGUyhNYXAsdmlzaXRlZCxpKTsKCQkJY291bnQxKys7CgkJfQoJfQoJCgljb3V0PDxicmlkZ2VzLnNpemUoKS0xPDxlbmRsOwoJZm9yKGludCBpPTA7aTxicmlkZ2VzLnNpemUoKS0xO2krKykKCXsKCQljb3V0PDxicmlkZ2VzW2ldPDwiICI8PGJyaWRnZXNbaSsxXTw8ZW5kbDsKCX0KCgoJcmV0dXJuIDA7Cn0=