만드는 중입니다

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

칵테일 파티

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

요약
길이 r인 부분 문자열이 같은 컵 쌍의 개수를 r=0부터 n-1까지 각각 세고, 그런 두 컵을 섞었을 때 얻는 최대 맛의 곱을 구합니다.
난이도

보통10점 중 7점

유형
문자열, 문자열 매칭, 유니온 파인드, 정렬
정답자
아직 제출이 없습니다

문제

길이가 nn인 문자열이 주어진다. 이 문자열은 nn개의 칵테일 컵에 붙은 라벨이며, 각 ii번째 컵의 라벨은 sis_i이다. 모든 라벨은 소문자 영어 알파벳 26개 중 하나이다. Str(l,r)=slsl+1⋯sr\mathrm{Str}(l,r) = s_l s_{l+1} \cdots s_r은 ll번째 컵부터 rr번째 컵까지의 라벨로 이루어진 문자열이다. 1≤p≤p0≤n1 \le p \le p_0 \le n, 1≤q≤q0≤n1 \le q \le q_0 \le n, p≠qp \ne q, p0−p+1=q0−q+1=rp_0-p+1 = q_0-q+1 = r일 때 Str(p,p0)=Str(q,q0)\mathrm{Str}(p,p_0) = \mathrm{Str}(q,q_0)이면, pp번째 컵과 qq번째 컵을 rr-similar하다고 한다. 어떤 r>1r > 1에 대해 두 컵이 rr-similar하면, 이 두 컵은 11-similar, 22-similar, ..., (r−1)(r-1)-similar하기도 하다. 1≤p≤q≤n1 \le p \le q \le n이고 p≠qp \ne q인 모든 두 컵은 00-similar하다.

Freda는 각 컵에 맛있는 정도 aia_i를 매겼다. pp번째 컵과 qq번째 컵을 섞으면 맛있는 정도가 apaqa_p a_q인 칵테일이 만들어진다. r=0,…,n−1r = 0, \dots, n-1마다 rr-similar한 두 컵을 고르는 방법의 수와, rr-similar한 두 컵을 섞어 얻을 수 있는 맛있는 정도의 최댓값을 구하라.

입력

첫째 줄에 컵의 개수 nn이 주어진다. 둘째 줄에는 길이가 nn인 문자열 SS가 주어지며, ii번째 문자가 ii번째 컵의 라벨이다. 셋째 줄에는 nn개의 정수가 공백으로 구분되어 주어지며, ii번째 정수가 aia_i이다.

출력

nn개의 줄을 출력한다. ii번째 줄에는 두 정수를 공백으로 구분하여 출력한다. 첫 번째 정수는 (i−1)(i-1)-similar한 두 컵을 고르는 방법의 수이고, 두 번째 정수는 (i−1)(i-1)-similar한 두 컵을 섞어 얻을 수 있는 맛있는 정도의 최댓값이다. (i−1)(i-1)-similar한 두 컵이 존재하지 않으면 그 줄에 0 0을 출력한다.

제한

10≤n≤300 00010 \le n \le 300\,000

∣ai∣≤1 000 000 000|a_i| \le 1\,000\,000\,000

예제2

  1. 예제 1

    입력
    10
    ponoiiipoi
    2 1 4 7 4 8 3 6 4 7
    
    예상 출력
    45 56
    10 56
    3 32
    0 0
    0 0
    0 0
    0 0
    0 0
    0 0
    0 0
    
  2. 예제 2

    입력
    12
    abaabaabaaba
    1 -2 3 -4 5 -6 7 -8 9 -10 11 -12
    
    예상 출력
    66 120
    34 120
    15 55
    12 40
    9 27
    7 16
    5 7
    3 -4
    2 -4
    1 -4
    0 0
    0 0