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 Scala (2.13.1) (judge verdict: Wrong Answer)

object Main {
  def main(args: Array[String]): Unit = {
    import scala.io.StdIn.readLine
    val Array(datN,datX,datM) = readLine.split(" ").map(_.toLong)

    val a2 = (datX * datX) % datM

    def makeAn(res : Long, an : Long, count : Long) : Long = {
      if (count == 0) res
      else {
        val ann = (an * an) % datM
        val sum = res + ann
        makeAn(sum, ann, count - 1)
      }
    }

    val ans = if ((datN - 2) > datM) {
      val loop = makeAn(0, a2, datM)
      datX + a2 + ((datN - 2) / datM) * loop + makeAn(0, a2, (datN - 2) % datM)
    } else {
      datX + a2 + makeAn(0, a2, datN - 2)
    }
    println(ans)
  }
}