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: Runtime Error)

// #include <bits/stdc++.h>
#include<iostream>
#include<iomanip>
#include<vector>
#include<string>
#include<algorithm>
#include<cmath>
#include<set>
#include<map>
#include<queue>
#define rep(i,n) for(int i=0;i<n;i++)
#define reps(i,x,n) for(int i=x;i<n;i++)
#define breps(i,x,n) for(int i=x;i>=n;i--)
#define exrep(x,vec) for(auto&& x : vec);
#define PI 3.14159265358979323846264338327950288
const long long MOD = 1000000007;
const int INF{ 2100000000 };	// MAX:2147483647
typedef long long ll;
using namespace std;

// ------------- ここからコード -------------




int main(void) {
	ll N, X, M;
	cin >> N >> X >> M;
	
	set<ll> set;
	
	vector<ll> A(N,-1);
	A[0] = X;
	set.insert(A[0]);

	ll END = 0;

	for (ll i = 1; i < N; i++) {
		A[i] = (A[i - 1] * A[i - 1]) % M;
		
		int setSize = set.size() + 1;
		set.insert(A[i]);
		if (setSize != set.size()) {
			vector<ll>::iterator itr = find(A.begin(), A.end(), A[i]);
			END = distance(A.begin(), itr);
			A[i] = -1;
			break;
		}
	}

	ll ans = 0;
	int cnt = 0;
	for (ll i = 0; i < N; i++) {
		ans += A[cnt];
		if (cnt + 1 == set.size()) cnt = END;
		else cnt++;
	}

	cout << ans << endl;
	return 0;
}