import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class 바이러스 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
long K = Integer.parseInt(st.nextToken());
int P = Integer.parseInt(st.nextToken());
int N = Integer.parseInt(st.nextToken());
while(N > 0) {
K = K % 1000000007 * P;
N--;
}
System.out.println(K % 1000000007);
}
}
제약조건을 확인해보니 K의 값이 계속 갱신되면 int의 범위를 벗어날 거 같았다.
정수 타입을 long 타입으로 선언을 하였고 모든 산수가 이뤄진 후 나머지를 계산하면 long의 범위도 벗어날 것이라 생각했다.
최종 바이러스 개수인 K의 값을 1000000007로 나머지 연산을 해서 출력하기 때문에 중간에 나머지 연산을 섞어 K의 값을 갱신해도 답은 같게 나온다.