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 Ruby (2.7.1) (judge verdict: Accepted)

MEMO_LENGTH = 200000

N, X, M = gets.split.map &:to_i
a = X
ans = 0
if N < MEMO_LENGTH
  N.times{
    ans += a
    a = a.pow(2, M)
  }
  p ans
  exit
end

memo = []
MEMO_LENGTH.times{
  ans += a
  memo << a
  a = a.pow(2, M)
}
last = memo[-1]
memo.pop
idx = memo.rindex(last)
# p [last, idx]
period = MEMO_LENGTH - 1 - idx
period_arr = memo[idx+1..-1] + [memo[idx]]
period_sum = period_arr.sum
div, mod = (N - MEMO_LENGTH).divmod(period)
# p [div,mod, period_arr]
ans += period_sum * div + period_arr.take(mod).sum
p ans