inline void dfs2(int now,int topp){
top[now]=topp;
dfn[now]=++num;
rk[num]=now;
if(son[now]) {
dfs2(son[now],topp);
}
for(register int i=head[now];i;i=nxt[i]){
int y=to[i];
if(y==f[now]) continue;
if(y==son[now]) continue;
dfs2(y,y);
}
}
inline void dfs2(int now,int topp){
top[now]=topp;
dfn[now]=++num;
rk[num]=now;
if(!son[now]) return ;
dfs2(son[now],topp);
for(register int i=head[now];i;i=nxt[i]){
int y=to[i];
if(y==f[now]) continue;
if(y==son[now]) continue;
dfs2(y,y);
}
}