public List<Router> choosePathWithFinal(Router finalRouter) throws InterruptedException, PathSelectionFailedException {
final Set<Router> excluded = new HashSet<Router>();
excludeChosenRouterAndRelated(finalRouter, excluded);
final Router middleRouter = chooseMiddleNode(excluded);
if(middleRouter == null) {
throw new PathSelectionFailedException("Failed to select suitable middle node");
}
excludeChosenRouterAndRelated(middleRouter, excluded);
final Router entryRouter = chooseEntryNode(excluded);
if(entryRouter == null) {
throw new PathSelectionFailedException("Failed to select suitable entry node");
}
return Arrays.asList(entryRouter, middleRouter, finalRouter);
}