← Home
package main

import (
	"bufio"
	"fmt"
	"os"
)

func powMod(a, e, mod int64) int64 {
	a %= mod
	res := int64(1 % mod)
	for e > 0 {
		if e&1 == 1 {
			res = res * a % mod
		}
		a = a * a % mod
		e >>= 1
	}
	return res
}

func gcd(a, b int64) int64 {
	for b != 0 {
		a, b = b, a%b
	}
	return a
}

func main() {
	in := bufio.NewReaderSize(os.Stdin, 1<<20)
	var n, k, m int64
	fmt.Fscan(in, &n, &k, &m)

	kn := powMod(k, n, m)

	if k%2 == 1 {
		d := n - 2
		if d < 0 {
			d = -d
		}
		g := gcd(d, k)
		ans := kn - powMod(k-1, n, m)
		t := (g - 1) % m
		if n%2 == 0 {
			ans -= t
		} else {
			ans += t
		}
		ans %= m
		if ans < 0 {
			ans += m
		}
		fmt.Println(ans)
	} else {
		d := n - 2
		if d < 0 {
			d = -d
		}
		g := gcd(d, k/2)
		ans := kn - powMod(k-2, n, m)
		t := powMod(2, n, m) * ((g - 1) % m) % m
		if n%2 == 0 {
			ans -= t
		} else {
			ans += t
		}
		ans %= m
		if ans < 0 {
			ans += m
		}
		inv2 := (m + 1) / 2
		ans = ans * inv2 % m
		fmt.Println(ans)
	}
}