static IEnumerable <Route> ServeRequest(Request request)
        {
            if (!CheckRequest(request))
            {
                return(null);
            }
            (IGraphDatabase cars, IGraphDatabase trains) = MockData.InitDatabases();
            List <IGraphDatabase> databases = new List <IGraphDatabase>();

            databases.Add(cars);
            databases.Add(trains);

            IGraphDatabase database = new VehicleDatabase(databases, request.Filter.AllowedVehicles);

            database = new PopulationDatabase(database, request.Filter.MinPopulation);
            database = new HasRestaurantDatabase(database, request.Filter.RestaurantRequired);

            List <ISolver> solvers = new List <ISolver>();

            solvers.Add(new BFS());
            solvers.Add(new DFS());
            solvers.Add(new DijkstraCost());
            solvers.Add(new DijkstraTime());

            IRouteProblem problem = ProblemFactory.MakeProblem(request.Problem, request.From, request.To);

            problem.Graph = database;
            foreach (ISolver solver in solvers)
            {
                if (solver.Name == request.Solver && problem.TrySolveBySolver(solver, out IEnumerable <Route> routes))
                {
                    return(routes);
                }
            }
            Console.WriteLine("Cannot find algorithm to solve this problem");
            return(null);
        }