public static int[][] toPrintable(int[] buildings) {
        // 1 row for bottom 2 cols for walls and 2 for heights
        int[][] res = new int[max(buildings)][buildings.length + 4];
        for (int i = 0; i < res.length; i++) {
            Arrays.fill(res[i], BLANK);
        }
        // Side walls
        for (int i = 0; i < res.length; i++) {
            res[i][0] = res[i][buildings.length + 3] = res.length - i;
            res[i][1] = WALL;
            res[i][buildings.length + 2] = WALL;
        }

        int left = 2; // start of working zone
        int right = buildings.length + 1; // end of working zone

        // Buildings
        int max = max(buildings);
        int row = 0;
        while (max > 0) {
            for (int i = 0; i < buildings.length; i++) {
                if (buildings[i] >= max)
                    res[row][left + i] = BLOCK;
            }
            row++;
            max--;
        }

        // Filling with water
        int[] waterHeight = WaterAndCity.getWaterMaxHeight(buildings);

        for (int i = res.length - 1; i >= 0; i--)
            for (int j = 0; j < waterHeight.length; j++)
                if (res.length - i <= waterHeight[j] && res[i][left + j] == BLANK)
                    res[i][left + j] = WATER;

        return res;
    }