public static main(String[] args) throw IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in);
int l = Integer.parseInt(br.readLine());
String s = br.readLine();
long result = 0;
long temp = 1;
for (int i = 0; i < l; i++) {
result += ((s.charAt(i) - 'a' + 1) * temp);
temp = (temp * 31) % 1234567891;
}
System.out.println(result % 1234567891);
}
제곱이 들어가는 점이 가장 큰 주의점이다
여기서 r로 지정된 31의 50제곱은 long 타입의 범위를 넘어간다.
중간 연산에서 계속해서 M 을 나누어 주는 연산을 돌려야 범위 안에서 계산이 된다.