private void internalFind() {
		LinkedList<LeveledPoint> curPath = new LinkedList<>();
		Stack<LeveledPoint> stack = new Stack<LeveledPoint>();
		stack.push(new LeveledPoint(0, 0, 0));
		while(!stack.isEmpty()){
			LeveledPoint curPoint = stack.pop();
			curPath.subList(0, curPoint.LEVEL);
			log("level: " + curPoint.LEVEL);
			log(curPoint.toString());
			log(curPath.toString());
			curPath.push(curPoint);
			if(isFinalPoint(curPoint)){
				pathes.add(curPath);
				log("FINAL PATH: " + curPath);
				log("**************");
				log("");
			}
			if(MAZE.isRoad(curPoint.X + 1, curPoint.Y)){
				stack.push(new LeveledPoint(curPoint.X + 1, curPoint.Y, curPoint.LEVEL + 1));
			}
			if(MAZE.isRoad(curPoint.X, curPoint.Y + 1)){
				stack.push(new LeveledPoint(curPoint.X, curPoint.Y + 1, curPoint.LEVEL + 1));
			}
			if(MAZE.isRoad(curPoint.X + 1, curPoint.Y + 1)){
				stack.push(new LeveledPoint(curPoint.X + 1, curPoint.Y + 1, curPoint.LEVEL + 1));
			}
		}
	}