파일 업로드

수학 퍼즐

profile
실행 시간 제한메모리 제한
1 초256 MB
📃 해결할 문제

선생님과 민지는 여가 시간에 수학 퍼즐을 주고받아서 푸는 것을 좋아합니다. 최근 선생님이 민지에게 준 퍼즐은 굉장히 어려웠고, 민지는 그것을 풀지 못했습니다. 민지는 선생님에게 어려운 퍼즐로 보답하려고 합니다.

민지는 선생님에게 수식  (A+L+T+T+U+L)(P+R+L+T)(N+R+R)을 주었습니다. 이 수식에는 일곱 개의 변수 A, L, T, U, P, R, N이 포함되어 있습니다. 각 변수에 대해 민지는 그 변수가 가질 수 있는 최대 500개의 정수 값을 선생님에게 제공합니다. 그리고 이 수식이 7의 배수가 되도록 변수에 값을 할당하는 방법의 수를 구하라고 합니다.

이 문제의 답은 32비트 정수로 담을 수 있는 범위를 넘을 수 있으므로, 64비트 정수 (예: C 또는 C++의 "long long")를 사용하는 것이 좋습니다.

💻 입력

입력의 첫 번째 줄에는 정수 N이 포함됩니다. 다음 N 줄은 각각 하나의 변수와 그 변수의 가능한 값을 포함합니다. 각 변수는 이 목록에 최소 한 번, 최대 500번 나타납니다. 동일한 변수에 대해 가능한 값은 한 번 이상 나열되지 않습니다. 가능한 모든 값은 -10^5에서 10^5의 범위에 있습니다.

🖨️ 출력

위의 수식이 7의 배수로 평가될 수 있는 방법의 수를 나타내는 하나의 정수를 출력합니다.


💻 예제 입력 1
10
B 2
E 5
S 7
I 10
O 16
M 19
B 3
G 1
I 9
M 2
🖨️ 예제 출력 1
2

💡 힌트

두 가지 가능한 방법은 다음과 같습니다.

(A,L,T,U,P,R,N) = (2, 5, 7, 9, 1, 16, 19) -> 51,765
                = (2, 5, 7, 9, 1, 16, 2) -> 34,510

출처: USACO 2015 US Open, Silver Problem 1. Bessie Goes Moo