아날로그 시계 그리기

아직 제출이 없습니다시간 제한1초메모리 제한128 MB

문제

우리의 낡은 시계가 네 시를 알리는 종을 친 뒤, 그 마지막 소리와 함께 나뭇가지 더미로 부서져 버렸습니다. 시계를 고치는 데 필요한 기술은 오래전에 잊혀 사라졌기에, 우리는 시계를 컴퓨터 프로그램으로 대체하기로 했습니다.

쉬운 일이라고요? 한 가지 더 말씀드릴 것이 있습니다. 최근 외계 생명체에 대한 연구에 따르면, 그들은 디지털 세계에 살고 있어 바늘 두 개가 움직이는 전통적인 시계판을 읽지 못한다고 합니다. 그것은 그들의 기술 수준을 넘어서는 일입니다. 그래서 보안 위원회는, 시간 정보를 인간이 아닌 존재로부터 지키기 위해 새 시계가 바로 그런 전통적인 "아날로그" 방식의 표시를 사용해야 한다고 결정했습니다.

입력

입력은 여러 개의 인스턴스로 이루어집니다. 각 인스턴스는 콜론으로 구분된 두 정수 $H$ ($0 \le H \le 23$)와 $M$ ($0 \le M \le 59$)이 한 줄에 주어집니다. $M$은 항상 두 자리로 주어지고, $H$는 한 자리 또는 두 자리입니다. 즉 $H = 0$인 경우를 제외하면 앞에 $0$이 붙지 않습니다.

마지막 인스턴스 다음 줄에는 단어 END가 주어집니다.

출력

각 입력 인스턴스 H:M에 대해, $H$시 $M$분을 나타내는 ASCII 아트 시계판을 아래 규칙에 따라 그리세요.

시계의 테두리는 한 변이 $51$글자인 정사각형입니다. 이 글자들은 대문자 X이지만, 네 모서리와 열 번째마다 오는 글자는 항상 @입니다. 숫자 $3$, $6$, $9$, $12$는 각각 알맞은 변의 가운데에 놓이며, 숫자와 테두리 사이에는 정확히 한 칸의 공백이 있습니다. $12$에서는 두 숫자 $1$과 $2$ 사이에 한 칸의 공백이 있습니다. 시계판의 중심에는 항상 별표 *가 놓입니다. 시각적으로 비어 있는 칸은 모두 단순한 공백입니다.

두 바늘은 시각에 따라 달라지는 유일한 요소입니다. 아래 설명에서는 각 글자 칸(공백이든 아니든)을 한 변이 $1$인 정사각형으로 보고, 좌표계의 원점 $(0, 0)$을 별표가 있는 칸의 중심에 두며, 첫 번째 축은 오른쪽을, 두 번째 축은 위쪽을 향한다고 가정합니다.

시침은 $(0, 0)$에서 시작하는 길이 $15$의 선분입니다. $12$시에 똑바로 위를 가리키며, 매 분 같은 각도만큼 균일하게 회전합니다. 분침은 $(0, 0)$에서 시작하는 길이 $21$의 선분으로, 매 정시마다 똑바로 위를 가리키고 역시 매 분 시계 방향으로 균일하게 회전합니다. 분침은 시침보다 위에 있다고 보므로, 시침을 나타내는 글자는 분침의 일부에 가려질 수 있습니다.

수직 방향과 이루는 각이 $D$도인 직선은 다음과 같이 그립니다. $0 \le D \le 45$이면, 각 행 $i$마다 글자 하나를 찍되, 기하학적 직선 위에 정확히 놓인 점 $(x_i, i)$($x_i$는 실수)에 가장 가까운 정수 좌표 $(n_i, i)$에 찍습니다. $45 \le D \le 90$이면, 각 열 $i$마다 글자 하나를 찍되, 직선 위의 실수 점 $(i, y_i)$에 가장 가까운 정수 좌표 $(i, k_i)$에 찍습니다.

어떤 위치 $(i, j)$에 그려지는 글자는 그 직선의 두 이웃 글자에 따라 결정됩니다. 그 글자는

  • $(i-1, j)$와 $(i+1, j)$ 두 위치에도 글자가 있으면 빼기 기호 -,
  • $(i, j-1)$와 $(i, j+1)$ 두 위치에도 글자가 있으면 세로줄 |,
  • $(i-1, j+1)$와 $(i+1, j-1)$ 위치에 글자가 있으면 역슬래시 \,
  • $(i-1, j-1)$와 $(i+1, j+1)$ 두 위치에도 글자가 있으면 슬래시 /,
  • 그 외의 경우에는 소문자 o입니다.

$(0, 0)$에서 시작하는 길이 $S$의 선분은 위와 똑같이 직선의 글자들을 만들되, 칸의 중심과 원점 사이의 거리가 $S$ 이하인 글자, 즉 $0 < |(0,0),(i,j)| \le S$인 글자만, 그리고 직선의 한쪽 방향으로만 찍어서 그립니다.

남은 애매한 부분은 예제 출력을 참고하여 해결하세요. 인접한 시계판 사이에는 빈 줄을 하나씩 넣어 구분합니다.