#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; }