public static List<List<String>> GoGraph(Stack<WordNode> path, List<List<String>> result, String end, List<WordNode> nextNode, Stack<Integer> Soncount) {
    	int son = Soncount.firstElement();
    	
    	while(!nextNode.isEmpty()) {
    		int nextNodeson = 0;
    		boolean noway = true;
    		WordNode currentNode = nextNode.get(0);
    		nextNode.remove(0);
    		son--;
//    		WordNode currentNode = path.firstElement();
//    		currentNode.inStack = true;
    		if(currentNode.word.equals(end)) {
    			List<String> newpath = new ArrayList<String>();
    			for(WordNode node : path) {
    				newpath.add(node.word);
    			}
    			result.add(newpath);
    			return result;
    		}else {
    			for(WordNode relation : currentNode.relations) {
    				if(!relation.inStack)
    				{
    					nextNode.add(relation);
        				relation.inStack = true;
//        				path.remove(0).inStack = false;
//        				break;
        				noway = false;
        				nextNodeson++;
    				}
        		}
    			
    			if(noway) {
    				
    			} else {
	    			Soncount.add(Integer.valueOf(nextNodeson));
	    			if(son == 0) {
	    				path.add(currentNode);
	    				Soncount.remove(0);
	    			}
	    			GoGraph(path, result, end, nextNode, Soncount);
	    			if(path.size() != 1) {
	    				path.pop().inStack = false;
	    			}
    			}
    		}
    		
    	}
		return result;
		
    	
    }