#pragma GCC optimize("Ofast") #pragma GCC target("avx2") char*mmap(); #define RD(v) long v=0;{int _c;while(_c=*rp++-48,_c>=0)v=v*10+_c;} char wbuf[11*100000]; #define MD 1000000007 main(){ char*rp=mmap(0l,21l*100000+100,1,2,0,0ll); char*wp=wbuf; while(*rp++!=10); do{ RD(x); RD(k); long s=MD-1; long u=1; long v=0; while(s){ long e=k/s; { long t=k-e*s; k=s; s=t; } { long t=u-e*v; u=v; v=t; } } u+=u<0?MD-1:0; long z=1; for(;u;u>>=1){ if(u&1){ z=z*x%MD; } x=x*x%MD; } if(z>=100000000){ { long z2=z/100000000; long n=0; long d=0; while(d=d<<8|z2%10|0x30,++n,z2/=10); *(long*)wp=d; wp+=n; } { long n=8; long d=0; while(d=d<<8|z%10|0x30,z/=10,--n); *(long*)wp=d; wp+=8; } }else{ long n=0; long d=0; while(d=d<<8|0x30|z%10,++n,z/=10); *(long*)wp=d; wp+=n; } *wp++=10; }while(*rp); write(1,wbuf,wp-wbuf); _exit(0); }