public String prettyPrint() {
		String result = "";
		for (int i = 0; i < 2; i++) {
			for (int j = 0; j < 2; j++) {
				boolean b1 = i == 0 ? false : true;
				boolean b2 = j == 0 ? false : true;

				List<Boolean> symbols = new ArrayList<Boolean>();
				symbols.add(b1);
				symbols.add(b2);

				result += "P(" + b2 + b1 + "|h) = " + predict(symbols) + "\n";
			}
		}
		if (root != null) {
			int nodesPerLevel = 1;
			int nodesPerNextLevel = 0;
			int nodesProcessed = 0;
			LinkedList<CTNode> bfsQueue = new LinkedList<CTNode>();
			bfsQueue.add(root);
			while (!bfsQueue.isEmpty()) {
				CTNode currNode = bfsQueue.removeFirst();
				result += currNode + " ";
				nodesProcessed++;
				if (currNode.child(false) != null) {
					bfsQueue.addLast(currNode.child(false));
					nodesPerNextLevel++;
				}
				if (currNode.child(true) != null) {
					bfsQueue.addLast(currNode.child(true));
					nodesPerNextLevel++;
				}
				if (nodesProcessed == nodesPerLevel) {
					result += "\n\n";
					nodesProcessed = 0;
					nodesPerLevel = nodesPerNextLevel;
					nodesPerNextLevel = 0;
				}
			}
		}
		return result;
	}