private int getIndex4RandomOutNode(List<Node> selectCollection, Node nodeIn) {
        int Min = 0, Max = selectCollection.size() - 1;
        int selectedIngex = Min + (int) (Math.random() * ((Max - Min) + 1));

        boolean conclusion = true;

        //verify declining hierarchy
        Set<Node> toVerifyNodes = new HashSet<Node>();
        Set<Node> verifiedNodes = new HashSet<Node>();
        verifiedNodes.add(selectCollection.get(selectedIngex));
        toVerifyNodes.add(nodeIn);
        while (!toVerifyNodes.isEmpty()) {
            conclusion = verify_IN_Hierarchy(conclusion, toVerifyNodes, verifiedNodes);
        }

        if (conclusion == true) {
            //verify increase hierarchy
            Set<Node> toVerifyOutNodes = new HashSet<Node>();
            Set<Node> verifiedOutNodes = new HashSet<Node>();
            verifiedOutNodes.add(nodeIn);
            toVerifyOutNodes.add(selectCollection.get(selectedIngex));
            while (!toVerifyOutNodes.isEmpty()) {
                conclusion = verify_OUT_Hierarchy(conclusion, toVerifyOutNodes, verifiedOutNodes);
            }
        }

        if (conclusion == false) {
            selectCollection.remove(selectCollection.get(selectedIngex));
            selectedIngex = -1;
        }
        return selectedIngex;
    }