#include<iostream>
#include<cstring>
#include<queue>
#include<vector>
using namespace std;
const int maxn = 3e5+11;
vector<int>G[maxn];
void add(int x,int y){
G[x].push_back(y);
}
int n,m;
int dp[maxn];
int son[maxn];
int dfs(int x,int fa){
int ans = 0;
for(int i=0;i<G[x].size();i++){
int p = G[x][i];
if(p == fa) continue;
dfs(p,x);
son[x] ++;
ans = max(ans,dp[p]);
}
if(son[x] == 0){
dp[x] = 1;
return 0;
}
dp[x] = ans + son[x];
return 0;
}
int main(){
scanf("%d%d",&n,&m);
for(int i=0;i<m;i++){
int x,y;
scanf("%d%d",&x,&y);
add(x,y);
add(y,x);
}
cout<<endl;
dfs(1,-1);
for(int i=1;i<=n;i++){
cout<<dp[i]<<" "<<i<<endl;
}
return 0;
}