题目描述
一组敢死队员需要摧毁敌人的指挥部。敌人的指挥部由多栋建筑构成,建筑间有道路相连。敢死队员在建筑的底部安放炸弹从而将之摧毁。他们在某栋建筑集结,然后利用建筑间的道路向各栋建筑渗透破坏。敢死队员可以接续摧毁建筑,但是在最终完成任务时他们必须在某栋建筑再次集结。在本问题中,给出不同的敌人指挥部的描述,编写程序确定完成任务的最短时间。每名敢死队员从一栋建筑移动到另外一栋建筑都只需相同的单位时间。你可以忽略安置炸弹的时间,每名敢死队员能够携带数量不限的炸弹,为了完成这项任务,有数量不限的敢死队员可供派遣。
输入格式
本题有多组数据。
输入的第一行包含一个整数 T(T<50),表示测试数据的组数。每组测试数据起始为一个整数 N(N≤100),表示敌人指挥部包含的建筑栋数,接着一行包含一个正整数 R,表示连接这些建筑的道路数量,后面的 R 行每行包含两个不同的整数 u,v(0≤u,v<N),表示在建筑 u 和建筑 v 之间有一条道路。建筑从 0 到 N−1 进行编号。每组测试数据的最后一行包含两个整数 s,d(0≤s,d<N),表示敢死队员初始集结的建筑编号和完成任务后集结的建筑编号。你可以假定任意两栋建筑间至多只有一条道路相连。输入保证从任何一栋建筑出发沿着给定的道路能够到达任意其他的建筑。
输出格式
对于每组测试数据输出一行,包含测试数据的组数以及完成任务的最短时间。