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)

a = gets.split(" ")
$n = a[0].to_i
$x = a[1].to_i
$m = a[2].to_i

if $n < 10**6 
  ans = 0
  a = $x
  $n.times do |i|
    ans += a 
    a = (a * a) % $m
  end
  puts ans
else
  cycle = [$x]
  cycle_sum = $x
  s1 = Hash.new
  s1[$x] = 0

  element = $x
  $first_in_cycle = 0
  $m.times do |i|
    element = (element * element) % $m 
    if (s1.include?(element))
      $first_in_cycle = s1[element]
      $first_in_cycle.times do |j|
        cycle_sum -= cycle[j]
      end
      break
    end
    cycle.push(element)
    cycle_sum += element
    s1[element] = i+1
  end
  # byebug
  q = ($n - $first_in_cycle) / (cycle.length - $first_in_cycle)
  r = ($n - $first_in_cycle) % (cycle.length - $first_in_cycle)
  ans = q * cycle_sum
  r.times do |i|
    ans += cycle[$first_in_cycle + i]
  end
  $first_in_cycle.times do |i|
    ans += cycle[i]
  end
  puts ans
end