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 Rust (1.42.0) (judge verdict: Accepted)

fn main() {
	let mut s = String::new();
	use std::io::Read;
	std::io::stdin().read_to_string(&mut s).unwrap();
	let mut s = s.split_whitespace();
	let n: i64 = s.next().unwrap().parse().unwrap();
	let x: i64 = s.next().unwrap().parse().unwrap();
	let m: i64 = s.next().unwrap().parse().unwrap();

	let mut to = vec![-1; m as usize];
	let l = {
		let mut a = x;
		while to[a as usize] == -1 {
			let b = a * a % m;
			to[a as usize] = b;
			a = b;
		}
		a
	};

	let ans = if n <= 300000 {
		let mut ans = 0;
		let mut a = x;
		for _ in 1..=n {
			ans += a;
			a = a * a % m;
		}
		ans
	} else {
		let mut ans = 0;
		let mut a = x;
		let mut n = n;
		while a != l {
			ans += a;
			a = to[a as usize];
			n -= 1;
		}
		let mut cycle = 0;
		let mut cs = 0;
		loop {
			cs += a;
			a = to[a as usize];
			cycle += 1;
			if a == l {
				break;
			}
		}
		let cnt = n / cycle;
		ans += cnt * cs;
		n -= cnt * cycle;
		for _ in 0..n {
			ans += a;
			a = a * a % m;
		}

		ans
	};
	println!("{}", ans);
}