public void Run()
        {
            var reader = new ConsoleReader();
            var searcher = new DfsSearcher<long>();
            IEnumerable<KeyValuePair<int, int>> data = reader.GetData();

            var addedNodes = new Dictionary<int, INode<long>>();
            foreach (var item in data)
            {
                if (!addedNodes.ContainsKey(item.Key))
                {
                    addedNodes.Add(item.Key, new TreeNode<long>(item.Key) { });
                }

                INode<long> parentNode = addedNodes[item.Key];

                if (!addedNodes.ContainsKey(item.Value))
                {
                    addedNodes.Add(item.Value, new TreeNode<long>(item.Value) { });
                }

                INode<long> childNode = addedNodes[item.Value];

                parentNode.AddChild(childNode);
                childNode.AddChild(parentNode);
            }

            var processedNodes = addedNodes
                .Select(kvp => kvp.Value)
                .Where(n => n.ChildrenCount == 1)
                .ToList();

            foreach (var item in processedNodes)
            {
                searcher.GetResult(item);
            }

            searcher.WriteResultOn(Console.Out);
        }