#include #include #include #include using namespace std; const int MAXN=111111; struct Edge{ int from,to,next; Edge(){} Edge(int f,int t,int n):from(f),to(t),next(n){} }edge[MAXN*2]; int head[MAXN],tot,fa[MAXN][20],dep[MAXN],q[MAXN],n,m; bool vis[MAXN]; struct Qes{ int u,v,lca; Qes(){} Qes(int _u,int _v,int _fa):u(_u),v(_v),lca(_fa){} bool operator<(const Qes&rhs)const{ return dep[lca]>dep[rhs.lca]; } }qes[MAXN]; void init(){ for(int i=1;i<=n;i++){ head[i]=-1; vis[i]=0; } tot=0; } void add(int f,int t){ edge[tot]=Edge(f,t,head[f]); head[f]=tot++; } void bfs(int root){ int tail=0; q[tail++]=root; fa[root][0]=root;dep[root]=0; for(int i=0;i'9')); if(c==EOF)return false; while('0'<=c && c<='9'){a=a*10-'0'+c;c=getchar();} return true; } inline void ot(int a){ if(a>9) ot(a/10); putchar(a%10+'0'); } int main() { while(get(n)){ get(m); init(); int u,v; for(int i=1;i