int G[maxn][maxn];
int n; //点数
int m; //边数
int vis[maxn];
void init()
{
memset(G,0,sizeof(G));
memset(vis,0,sizeof(vis));
for(int i=0; i<m; i++)
{
int u,v;
scanf("%d%d",&u,&v);
G[u][v] = 1;
}
}
void dfs(int u)
{
vis[u] = 1;
printf("%d",u);
for(int i=1; i<=n; i++)
if(G[u][i] && !vis[i])
dfs(i);
}
void bfs(int u)
{
queue <int> Q;
vis[u] = 1;
Q.push(u);
while(!Q.empty())
{
int v = Q.front();
Q.pop();
printf("%d ",v);
for(int i=1; i<=n; i++)
if(G[v][i] && !vis[i])
{
vis[i] = 1;
Q.push(i);
}
}
}