public void AddLevel(List<Node> prevLevel, List<Integer> toAdd) {
		
		if(toAdd.size() == 0) {
			return;
		}
		
		//Adding a random number of node in this level
		int nodeNum = randomBetween(minLevelLength, maxLevelLength);
		List<Node> curLevel = new ArrayList<Node>();
		for(int i = 0 ; i < nodeNum && toAdd.size() > 0 ; i++) {
			Integer id = toAdd.get(0);
			toAdd.remove(0);
			
			curLevel.add(new Node("R"+ id));
		}
		
		//generating a list of candidate for the transitions
		List<Node> candidates = new ArrayList<Node>();
		candidates.addAll(prevLevel);
		candidates.addAll(curLevel);
		
		//Adding transition to each of the generated nodes
		for(Node node : curLevel) {
			
			//Shuffling the order of the candidate
			Collections.shuffle(candidates);
			
			int parentNum = randomBetween(minParent, maxParent);
			
			//Adding the candidate
			for(Node candidate : candidates) {
				if(node.ParentSize() < parentNum && 
						candidate.getId().compareTo(node.getId()) != 0 && 
						candidate.hasParent(node.getId()) == false) {
					node.AddParent(candidate.getId());
					candidate.AddChild(node);
				}
			}
		}
		
		//Recursive call for the next level
		AddLevel(curLevel, toAdd);
		
		return;
	}