#include typedef long long ll; typedef unsigned long long ull; #define FOR(i,a,b) for(int (i)=(a);i<(b);i++) #define REP(i,n) FOR(i,0,n) #define RANGE(vec) (vec).begin(),(vec).end() using namespace std; long long mpow(long long a, long long k, long long M) { long long b = 1LL; while (k > 0) { if (k & 1LL) b = (b*a)%M; a = (a*a)%M; k >>= 1; } return b; } class BigDigitProblem { public: void solve(void) { string N,M; cin>>N>>M; const ll Mod = 129402307; // Farmat Theorem より // N^M = N^(M%(Mod-1)) なので // N,M は N%Mod, M%(Mod-1) に置き換えられる // 後は高速ベキ乗計算 ll n,m; n = m = 0; for (auto c : N) { n *= 10; n += c-'0'; n %= Mod; } for (auto c : M) { m *= 10; m += c-'0'; m %= (Mod-1); } if ( N == "0" ) { assert(M != "0"); // 制約 cout<<0<solve(); delete obj; return 0; } #endif