Problem Specification Value
Time Limit 1 Sec
Memory Limit 162 MB
Submit 7130
Solved 3050

Description

监狱有连续编号为 1...... N 的 N 个房间, 每个房间关押一个犯人, 有 M 种宗教, 每个犯人可能信仰其中一种. 如果 相邻房间的犯人的宗教相同, 就可能发生越狱, 求有多少种状态可能发生越狱

Input

输入两个整数 M, N. 1<=M<=108, 1<=N<=1012

Output

可能越狱的状态数, 模 100003 取余

Sample Input

2 3

Sample Output

6

HINT

6 种状态为 (000) (001) (011) (100) (110) (111)

Source


巨水快速幂, 但是有一件事要考虑到, 就是 C++在计算模的时候会忽视所有负数, 所以所有负数在模之前都要尽可能地保证值大于 (等于) 零.

结论:res = n ^ m - m * (n - 1) ^ (m - 1)

就是说总共有 n ^ m 种方法排列, 但是对于第一个人的 m 种排列方法来说, 后面的 n - 1 个人就只有 (n - 1) ^ (m - 1) 种排法, 综上就是那个答案.


#include <iostream>
#include <cstdlib>
#include <cstdio>
using namespace std;

int main(int argc, char** argv)
{
    return 0;
}

from pydatagen import *
printf('%d %d\n' % (randint(1, 100000000), randint(1, 1000000000000)))
fclose()