Problem:
Score : 500 points

Problem Statement

Let us denote by f(x, m) the remainder of the Euclidean division of x by m.

Let A be the sequence that is defined by the initial value A_1=X and the recurrence relation A_{n+1} = f(A_n^2, M).
Find \displaystyle{\sum_{i=1}^N A_i}.

Constraints

1 \leq N \leq 10^{10}

0 \leq X < M \leq 10^5

All values in input are integers.

Input

Input is given from Standard Input in the following format:

N X M

Output

Print \displaystyle{\sum_{i=1}^N A_i}.

Sample Input 1

6 2 1001

Sample Output 1

1369

The sequence A begins 2,4,16,256,471,620,\ldots Therefore, the answer is 2+4+16+256+471+620=1369.

Sample Input 2

1000 2 16

Sample Output 2

6

The sequence A begins 2,4,0,0,\ldots Therefore, the answer is 6.

Sample Input 3

10000000000 10 99959

Sample Output 3

492443256176507

Solution in C++ (GCC 9.2.1) (judge verdict: Wrong Answer)

#include <bits/stdc++.h>
using namespace std;
#define repl(i, l, r) for (ll i = (l); i < (r); i++)
#define rep(i, n) repl(i, 0, n)
#define CST(x) cout << fixed << setprecision(x)
using ll = long long;
const ll MOD = 1000000007;
const int inf = 1e9 + 10;
const ll INF = 4e18 + 10;
const int dx[9] = {1, 0, -1, 0, 1, -1, -1, 1, 0};
const int dy[9] = {0, 1, 0, -1, 1, 1, -1, -1, 0};
int main() {
	cin.tie(0);
	cout.tie(0);
	ios::sync_with_stdio(false);

	ll n, x, m;
	cin >> n >> x >> m;
	vector<ll> a(m * 2 + 5);
	a[0] = x;
	rep(i, m * 2 + 4) a[i + 1] = a[i] * a[i] % m;

	int s = 0;
	for (int i = m * 2 + 3; i >= 0; i--) {
		if (a[i] == a[m * 2 + 4]) {
			s = m * 2 + 4 - i;
			break;
		}
	}

	int st = 0;
	rep(i, m * 2 - s) {
		if (a[i] == a[i + s]) {
			st = i;
			break;
		}
	}

	rep(i, m * 2 + 4) a[i + 1] += a[i];
	if (n <= 2 * m + 4)
		cout << a[n - 1] << endl;
	else {
		ll ans = (a[st + s] - a[st]) * ((n - st) / s) + a[st - 1];
		if ((n - st) % s != 0) {
			ans += a[(n - st) % s + st - 1];
			if (st != 0) ans -= a[st - 1];
		}
		cout << ans << endl;
	}

	return 0;
}