장난꾸러기 몇 명이 밤새 밀밭에 커다란 삼각형을 눕혀 놓으려고 한다. 위에서 내려다본 밀밭은 간격이 일정한 격자이고, 두 격자선이 만나는 격자점 가운데 몇 곳에는 나무가 서 있다. 이들은 삼각형의 세 꼭짓점을 모두 나무 위에 두려고 한다. 삼각형의 중심도 격자점에 놓이기를 바란다.
세 꼭짓점이 (x1,y1), (x2,y2), (x3,y3)인 삼각형의 중심은 (3x1+x2+x3,3y1+y2+y3)이다.
밀밭에 있는 모든 나무의 정수 좌표가 주어진다. 서로 다른 나무 세 개를 꼭짓점으로 하고 중심의 좌표가 모두 정수인 삼각형이 몇 개인지 세어라. 면적이 0인 삼각형도 유효한 삼각형으로 센다.
첫째 줄에 테스트 케이스의 개수 N이 주어진다. 이어지는 N개의 줄에는 각각 정수 n, A, B, C, D, x0, y0, M이 공백 하나로 구분되어 주어진다. n은 나무의 개수다.
나무의 좌표는 이 여덟 개의 수로 아래 의사 코드가 출력하는 값이다. mod는 나머지 연산이다. 첫 번째 나무는 x0과 y0을 나머지 연산 없이 그대로 쓰므로 M보다 클 수 있다.
X = x0, Y = y0
print X, Y
for i = 1 to n-1
X = (A * X + B) mod M
Y = (C * Y + D) mod M
print X, Y
같은 자리에 나무가 두 개 놓이지 않도록 매개변수가 정해진다.
제한:
각 테스트 케이스마다 한 줄에 Case #X: Y 형식으로 출력한다. X는 1부터 시작하는 테스트 케이스 번호이고, Y는 서로 다른 나무 세 개를 꼭짓점으로 하며 중심이 격자점인 삼각형의 개수다.
첫 번째 예제의 첫 테스트 케이스에서 여덟 개의 수가 만드는 나무 네 개는 (0,1), (7,3), (17,5), (17,7)이다.