private HotelsTree getHotelsTree(HotelQueue[] queues)
        {
            HotelsTree tree = new HotelsTree();

            tree.Root = new HotelNode("Root_Node");

            List<List<HotelQueue>> queueListList = new List<List<HotelQueue>>();
            List<HotelNode> NodeList = new List<HotelNode>();
            for (int i = 0; i < countrys.Length; i++)
            {
                List<HotelQueue> queueList = new List<HotelQueue>();

                for (int j = 0; j < queues.Length; j++)
                {
                    if (queues[j].Nodes[0][0].Equals(countrys[i].Name))
                    {
                        queueList.Add(queues[j]);
                    }
                }

                if (queueList.Count != 0)
                {
                    HotelNode Node = new HotelNode(countrys[i].Name);
                    tree.Root.Children.Add(Node);
                    NodeList.Add(Node);
                    queueListList.Add(queueList);
                }

            }

            List<List<HotelQueue>> queueListList_1 = new List<List<HotelQueue>>();
            List<HotelNode> NodeList_1 = new List<HotelNode>();

            for (int i = 0; i < NodeList.Count; i++)
            {
                for (int j = 0; j < regions.Length; j++)
                {
                    List<HotelQueue> queueList = new List<HotelQueue>();

                    for (int k = 0; k < queueListList[i].Count; k++)
                    {
                        if (queueListList[i][k].Nodes[1][0].Equals(regions[j].Name))
                        {
                            queueList.Add(queueListList[i][k]);
                        }
                    }

                    if (queueList.Count != 0)
                    {
                        HotelNode Node = new HotelNode(regions[j].Name);
                        NodeList[i].Children.Add(Node);
                        NodeList_1.Add(Node);
                        queueListList_1.Add(queueList);
                    }
                }
            }

            queueListList = new List<List<HotelQueue>>();
            NodeList = new List<HotelNode>();

            for (int i = 0; i < NodeList_1.Count; i++)
            {
                for (int j = 0; j < destinations.Length; j++)
                {
                    List<HotelQueue> queueList = new List<HotelQueue>();

                    for (int k = 0; k < queueListList_1[i].Count; k++)
                    {
                        if (queueListList_1[i][k].Nodes[2][0].Equals(destinations[j]))
                        {
                            queueList.Add(queueListList_1[i][k]);
                        }
                    }

                    if (queueList.Count != 0)
                    {
                        HotelNode Node = new HotelNode(destinations[j]);
                        NodeList_1[i].Children.Add(Node);
                        NodeList.Add(Node);
                        queueListList.Add(queueList);
                    }
                }
            }

            queueListList_1 = new List<List<HotelQueue>>();
            NodeList_1 = new List<HotelNode>();

            for (int i = 0; i < NodeList.Count; i++)
            {
                for (int j = 0; j < locations.Length; j++)
                {
                    List<HotelQueue> queueList = new List<HotelQueue>();

                    for (int k = 0; k < queueListList[i].Count; k++)
                    {
                        if (queueListList[i][k].Nodes[3][0].Equals(locations[j]))
                        {
                            queueList.Add(queueListList[i][k]);
                        }
                    }

                    if (queueList.Count != 0)
                    {
                        HotelNode Node = new HotelNode(locations[j]);
                        NodeList[i].Children.Add(Node);
                        NodeList_1.Add(Node);
                        queueListList_1.Add(queueList);
                    }
                }
            }

            queueListList = new List<List<HotelQueue>>();
            NodeList = new List<HotelNode>();

            for (int i = 0; i < NodeList_1.Count; i++)
            {
                for (int j = 0; j < levels.Length; j++)
                {
                    List<HotelQueue> queueList = new List<HotelQueue>();

                    for (int k = 0; k < queueListList_1[i].Count; k++)
                    {
                        if (queueListList_1[i][k].Nodes[4][0].Equals(levels[j]))
                        {
                            queueList.Add(queueListList_1[i][k]);
                        }
                    }

                    if (queueList.Count != 0)
                    {
                        HotelNode Node = new HotelNode(levels[j]);
                        NodeList_1[i].Children.Add(Node);
                        NodeList.Add(Node);
                        queueListList.Add(queueList);
                    }
                }
            }

            queueListList_1 = new List<List<HotelQueue>>();
            NodeList_1 = new List<HotelNode>();

            for (int i = 0; i < NodeList.Count; i++)
            {
                for (int j = 0; j < types.Length; j++)
                {
                    List<HotelQueue> queueList = new List<HotelQueue>();

                    for (int k = 0; k < queueListList[i].Count; k++)
                    {
                        if (queueListList[i][k].Nodes[5][0].Equals(types[j]))
                        {
                            queueList.Add(queueListList[i][k]);
                        }
                    }

                    if (queueList.Count != 0)
                    {
                        HotelNode Node = new HotelNode(types[j]);
                        NodeList[i].Children.Add(Node);
                        NodeList_1.Add(Node);
                        queueListList_1.Add(queueList);
                    }
                }
            }

            queueListList = new List<List<HotelQueue>>();
            NodeList = new List<HotelNode>();

            for (int i = 0; i < NodeList_1.Count; i++)
            {
                for (int j = 0; j < mealses.Length; j++)
                {
                    List<HotelQueue> queueList = new List<HotelQueue>();

                    for (int k = 0; k < queueListList_1[i].Count; k++)
                    {
                        if (queueListList_1[i][k].Nodes[6][0].Equals(mealses[j]))
                        {
                            queueList.Add(queueListList_1[i][k]);
                        }
                    }

                    if (queueList.Count != 0)
                    {
                        HotelNode Node = new HotelNode(mealses[j]);
                        NodeList_1[i].Children.Add(Node);
                        NodeList.Add(Node);
                        queueListList.Add(queueList);
                    }
                }
            }

            queueListList_1 = new List<List<HotelQueue>>();
            NodeList_1 = new List<HotelNode>();

            for (int i = 0; i < NodeList.Count; i++)
            {
                for (int k = 0; k < queueListList[i].Count; k++)
                {
                    List<HotelQueue> queueList = new List<HotelQueue>();
                    int j;
                    for (j = 0; j < hotelServicesSets.Count; j++)
                    {
                        bool flag = queueListList[i][k].Nodes[7].Length == hotelServicesSets[j].Count;
                        for (int l = 0; flag && l < queueListList[i][k].Nodes[7].Length && l < hotelServicesSets[j].Count; l++)
                        {
                            if (!queueListList[i][k].Nodes[7][l].Equals(hotelServicesSets[j][l]))
                            {
                                flag = false;

                            }
                        }
                        if (flag)
                        {
                            queueList.Add(queueListList[i][k]);
                            break;
                        }
                    }

                    if (queueList.Count != 0)
                    {
                        HotelNode Node = new HotelNode(hotelServicesSets[j].ToArray());
                        NodeList[i].Children.Add(Node);
                        NodeList_1.Add(Node);
                        queueListList_1.Add(queueList);
                       
                    }
                }
            }

            queueListList = new List<List<HotelQueue>>();
            NodeList = new List<HotelNode>();

            for (int i = 0; i < NodeList_1.Count; i++)
            {
                for (int k = 0; k < queueListList_1[i].Count; k++)
                {
                    List<HotelQueue> queueList = new List<HotelQueue>();
                    int j;
                    for (j = 0; j < roomServicesSets.Count; j++)
                    {
                    
                        bool flag = queueListList_1[i][k].Nodes[8].Length == roomServicesSets[j].Count;
                        for (int l = 0; flag && l < queueListList_1[i][k].Nodes[8].Length && l < roomServicesSets[j].Count; l++)
                        {
                            if (!queueListList_1[i][k].Nodes[8][l].Equals(roomServicesSets[j][l]))
                            {
                                flag = false;

                            }
                        }
                        if (flag)
                        {
                            queueList.Add(queueListList_1[i][k]);
                            break;
                        }
                    }

                    if (queueList.Count != 0)
                    {
                        HotelNode Node = new HotelNode(roomServicesSets[j].ToArray());
                        NodeList_1[i].Children.Add(Node);
                        NodeList.Add(Node);
                        queueListList.Add(queueList);
                        
                    }
                }
            }

            queueListList_1 = new List<List<HotelQueue>>();
            NodeList_1 = new List<HotelNode>();

            for (int i = 0; i < NodeList.Count; i++)
            {
                
                    for (int k = 0; k < queueListList[i].Count; k++)
                    {
                    List<HotelQueue> queueList = new List<HotelQueue>();
                    int j;
                    for (j = 0; j < childServicesSets.Count; j++)
                    {
                        bool flag = queueListList[i][k].Nodes[9].Length == childServicesSets[j].Count;
                        for (int l = 0; flag && l < queueListList[i][k].Nodes[9].Length && l < childServicesSets[j].Count; l++)
                        {
                            if (!queueListList[i][k].Nodes[9][l].Equals(childServicesSets[j][l]))
                            {
                                flag = false;

                            }
                        }
                        if (flag)
                        {
                            queueList.Add(queueListList[i][k]);
                            break;
                        }
                    }

                    if (queueList.Count != 0)
                    {
                        HotelNode Node = new HotelNode(childServicesSets[j].ToArray());
                        NodeList[i].Children.Add(Node);
                        NodeList_1.Add(Node);
                        queueListList_1.Add(queueList);
                        
                    }
                }
            }

            queueListList = new List<List<HotelQueue>>();
            NodeList = new List<HotelNode>();

            for (int i = 0; i < NodeList_1.Count; i++)
            {
                for (int j = 0; j < prices.Length; j++)
                {
                    List<HotelQueue> queueList = new List<HotelQueue>();

                    for (int k = 0; k < queueListList_1[i].Count; k++)
                    {
                        if (queueListList_1[i][k].Nodes[10][0].Equals(prices[j]))
                        {
                            queueList.Add(queueListList_1[i][k]);
                        }
                    }

                    if (queueList.Count != 0)
                    {
                        HotelNode Node = new HotelNode(prices[j]);
                        NodeList_1[i].Children.Add(Node);
                        NodeList.Add(Node);
                        queueListList.Add(queueList);
                    }
                }
            }


            for (int i = 0; i < NodeList.Count; i++)
            {
                for (int j = 0; j < queueListList[i].Count; j++)
                {
                    HotelNode Node = new HotelNode(queueListList[i][j].Hotel.name);
                    NodeList[i].Children.Add(Node);
                }
            }

            return tree;
        }
        private HotelQueue[] getHotelQueues(Hotel[] hotels)
        {

            List<HotelQueue> hotelQueues = new List<HotelQueue>();

            for (int i = 0; i < hotels.Length; i++)
            {
                HotelQueue queue = new HotelQueue();

                queue.Hotel = hotels[i];

                queue.Nodes = new string[11][];
                queue.Nodes[0] = new string[] { hotels[i].region.Country.Name };
                queue.Nodes[1] = new string[] { hotels[i].region.Name };
                queue.Nodes[2] = new string[] { hotels[i].destination };
                queue.Nodes[3] = new string[] { hotels[i].location };
                queue.Nodes[4] = new string[] { hotels[i].level };
                queue.Nodes[5] = new string[] { hotels[i].type };
                queue.Nodes[6] = new string[] { hotels[i].meals };
                queue.Nodes[7] = hotels[i].hotelServices;
                queue.Nodes[8] = hotels[i].roomServices;
                queue.Nodes[9] = hotels[i].childServices;
                queue.Nodes[10] = new string[] { hotels[i].price };

                hotelQueues.Add(queue);

            }

            return hotelQueues.ToArray();
        }