만드는 중입니다

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

트리에서 찾는 신비한 알파벳 두 개

면접 대비

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

요약
숫자 삼각형에서 합이 최대인 위에서 아래 경로를 고르고 동점은 제곱합으로 가른 뒤 두 합과 26으로 나눈 나머지 알파벳을 출력합니다.
난이도

쉬움10점 중 3점

유형
동적 계획법
정답자
아직 제출이 없습니다

문제

높이가 nn인 트리가 있고, 각 노드에 정수가 하나씩 들어 있다. 레벨 kk (1≤k≤n1 \le k \le n)에는 노드가 kk개 있고, 각 노드는 바로 아래 레벨에서 이웃한 두 노드와 이어진다. 이 두 노드가 그 노드의 자식이다. 레벨 nn의 노드에는 자식이 없다. 레벨 안쪽에 있는 노드는 부모가 둘일 수도 있다. 트리의 모양은 아래 그림과 같다.

    1
   / \
  4   5
 / \ / \
7   8   9

루트에서 시작해 매 단계 자식 중 하나로 내려가고 마지막 레벨에서 멈춘다. 이렇게 만드는 경로 중 노드 값의 합이 가장 큰 경로를 고른다. 위 그림에서는 1+5+9=151 + 5 + 9 = 15인 경로다. 이어져 있지 않은 노드끼리는 더할 수 없어서 5+75 + 7은 경로가 아니다.

고른 경로에서 수를 두 개 구한다. 첫 번째 수는 경로 위 값을 각각 제곱해서 더한 값이고, 두 번째 수는 경로 위 값을 그대로 더한 값이다. 위 그림에서 첫 번째 수는 12+52+92=1071^2 + 5^2 + 9^2 = 107, 두 번째 수는 1+5+9=151 + 5 + 9 = 15이다.

합이 가장 큰 경로가 여러 개면 그중 제곱의 합이 가장 큰 경로를 고른다.

두 수는 각각 'a'부터 'z'까지의 소문자 하나로 바꾼다. 00이 'a', 2525가 'z'다. 알파벳은 26개뿐이라 2525보다 큰 수는 26으로 나눈 나머지에 해당하는 알파벳을 쓴다. 그래서 00, 2626, 5252는 모두 'a'다. 위 그림에서 107107은 'd', 1515는 'p'가 된다.

트리가 주어졌을 때 신비한 알파벳 두 개를 찾는 프로그램을 작성하시오.

입력

첫째 줄에 트리의 높이 nn이 주어진다. (0<n<1000 < n < 100)

둘째 줄에 트리의 값이 레벨 1부터 레벨 nn까지 차례대로, 같은 레벨 안에서는 왼쪽부터 순서대로 공백으로 구분되어 주어진다. 값은 모두 0<i<1000 < i < 100인 정수이고, 개수는 n(n+1)2\frac{n(n+1)}{2}개다.

출력

첫째 줄에 위 규칙으로 구한 두 수를 첫 번째 수, 두 번째 수 순서로 공백 하나를 사이에 두고 출력한다.

둘째 줄에 두 수를 바꾼 알파벳 두 개를 같은 순서로 붙여서 출력한다.

예제4

  1. 예제 1

    입력
    3
    1 4 5 7 8 9
    
    예상 출력
    107 15
    dp
    
  2. 예제 2

    입력
    4
    1 5 2 5 1 9 3 4 20 1
    
    예상 출력
    486 32
    sg
    
  3. 예제 3

    입력
    5
    2 4 9 1 3 1 1 1 1 2 12 5 4 3 2
    
    예상 출력
    166 20
    ku
    
  4. 예제 4

    입력
    6
    9 8 8 7 7 7 9 1 1 3 8 2 10 5 1 2 3 2 1 9 81
    
    예상 출력
    6765 109
    ff