만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

고층 건물 실루엣

시간 제한1초메모리 제한32 MB

요약
지면 위에 선 N개 직사각형의 합집합 윤곽을 그림으로 그리고 지면을 제외한 둘레를 구합니다.
난이도

쉬움10점 중 3점

유형
시뮬레이션, 배열, 기하
정답자
아직 제출이 없습니다

문제

화가 빈센트는 고층 건물이 늘어선 도시를 여행하면서 건물의 실루엣만 그린 그림을 완성했다. 그림은 완성한 지 일주일 뒤에 불에 타 없어졌다. 건축가들이 건물의 정확한 크기를 다시 알려 주었으니 이제 그림을 복원하면 된다.

건물이 NN개 있다. ii번 건물은 변이 좌표축과 평행하고 왼쪽 아래 꼭짓점이 (Li,0)(L_i, 0), 오른쪽 위 꼭짓점이 (Ri,Hi)(R_i, H_i)인 직사각형이다. 실루엣은 이 직사각형 NN개의 합집합이다.

L=min⁡LiL = \min L_i, R=max⁡RiR = \max R_i, H=max⁡HiH = \max H_i라고 하자. 그림의 너비는 R−LR - L칸이라서 왼쪽 끝이 가장 왼쪽 건물의 왼쪽 변에, 오른쪽 끝이 가장 오른쪽 건물의 오른쪽 변에 맞는다. 그림은 건물을 그리는 HH줄 아래에 xx축 한 줄을 붙인 H+1H + 1줄이다. 왼쪽에서 jj번째 칸은 xx축의 구간 [L+j−1,L+j][L + j - 1, L + j]에, 위에서 kk번째 줄은 yy축의 구간 [H−k,H−k+1][H - k, H - k + 1]에 대응한다. 마지막 줄은 xx축이고 너비만큼 전부 *로 채운다.

좌표가 모두 정수이므로 xx축 위의 칸은 실루엣에 완전히 들어가거나 실루엣과 내부를 공유하지 않는다. 실루엣에 완전히 들어가는 칸을 건물 칸이라고 부르자. 어떤 건물 칸에 변이나 꼭짓점을 맞대는 여덟 칸 중에 건물 칸이 아닌 칸이 하나라도 있으면 그 칸에 #을 쓰고, 나머지 칸에는 .을 쓴다. 그림의 가로 범위를 벗어난 칸은 건물 칸이 아니다. 가로 범위 안에서 xx축 줄과 그 아래에 있는 칸은 건물 칸으로 본다. 이렇게 하면 실루엣의 윤곽선만 남는다.

수학자들이 구한 값을 확인해야 하니 실루엣의 둘레도 함께 구한다. xx축 위에 놓인 변은 둘레에 넣지 않는다.

입력

첫 줄에 건물의 수 NN이 주어진다. (1≤N≤10 0001 \le N \le 10\,000)

다음 NN개 줄에 ii번 건물을 나타내는 정수 LiL_i, RiR_i, HiH_i가 주어진다. (1≤Li,Ri,Hi≤1 0001 \le L_i, R_i, H_i \le 1\,000, 3≤Ri−Li≤1 0003 \le R_i - L_i \le 1\,000)

출력

첫 줄에 실루엣의 둘레를 출력한다. xx축 위에 놓인 변은 세지 않는다.

다음 H+1H + 1줄에 그림을 출력한다. HH는 가장 높은 건물의 높이다.

예제2

  1. 예제 1

    입력
    3
    1 5 4
    7 11 3
    9 13 5
    
    예상 출력
    28
    ........####
    ####....#..#
    #..#..###..#
    #..#..#....#
    #..#..#....#
    ************
    
  2. 예제 2

    입력
    6
    2 8 7
    5 13 5
    2 18 3
    23 26 5
    20 31 7
    21 30 10
    
    예상 출력
    61
    ...................#########.
    ...................#.......#.
    ...................#.......#.
    ######............##.......##
    #....#............#.........#
    #....######.......#.........#
    #.........#.......#.........#
    #.........######..#.........#
    #..............#..#.........#
    #..............#..#.........#
    *****************************