public Stack <StackNode> Merge(string identName)
        {
            Stack <StackNode> MergeOrder = new Stack <StackNode>();

            List <DictionaryNode> list = ResultTableRelations.dict[identName];

            int dictionaryNodeReference = list[0].Value;

            MergeOrder.Push(new StackNode(dictionaryNodeReference, -1));
            VisitedNode.Add(dictionaryNodeReference);
            VisitedName.Add(identName);

            if (list[0].KeyInRelatedNode != "$")
            {
                OrderQueue.Enqueue(list[0]);
                VisitedName.Add(list[0].KeyInRelatedNode);
            }

            for (int i = 1; i < list.Count; i++)
            {
                MergeOrder.Push(new StackNode(list[i].Value, dictionaryNodeReference));
                VisitedNode.Add(list[i].Value);
                VisitedName.Add(list[i].KeyInRelatedNode);

                if (list[i].KeyInRelatedNode != "$")
                {
                    OrderQueue.Enqueue(list[i]);
                    VisitedName.Add(list[i].KeyInRelatedNode);
                }
            }

            while (OrderQueue.Count > 0)
            {
                DictionaryNode top = OrderQueue.Dequeue();
                VisitedNode.Add(top.Value);

                list = ResultTableRelations.dict[top.KeyInRelatedNode];

                for (int i = 0; i < list.Count; i++)
                {
                    if (!VisitedNode.Contains(list[i].Value))
                    {
                        MergeOrder.Push(new StackNode(list[i].Value, top.Value));
                        VisitedNode.Add(list[i].Value);
                        VisitedName.Add(list[i].KeyInRelatedNode);

                        if (list[i].KeyInRelatedNode != "$")
                        {
                            OrderQueue.Enqueue(list[i]);
                        }
                    }
                }
            }

            return(MergeOrder);
        }