Pagini recente » Cod sursa (job #562288) | Cod sursa (job #594955) | Cod sursa (job #2375084) | Cod sursa (job #266699) | Cod sursa (job #2140142)
#include <cstdio>
using i32 = int;
using i64 = long long;
__attribute__((always_inline)) i32 expo(i32 A, i32 B)
{
i32 result = 1;
while(B)
{
if(B & 1)
result = (result * A) % 10007;
A = (A * A) % 10007;
B >>= 1;
}
return result;
}
#define SIZE 0x10000
__attribute__((always_inline)) void read(int &num)
{
static char inBuffer[SIZE];
static int p = ~-SIZE; num = 0x0;
while(inBuffer[p] < 0x30 | inBuffer[p] > 0x39)
{
++p != SIZE || (fread(inBuffer, 0x1, SIZE, stdin), p = 0x0);
}
while(inBuffer[p] > 0x2F & inBuffer[p] < 0x3A)
{
num = num * 0xA + inBuffer[p] - 0x30;
++p != SIZE || (fread(inBuffer, 0x1, SIZE, stdin), p = 0x0);
}
}
char outBuffer[0x927C0];
__attribute__((always_inline)) void itoa(i32 x)
{
static i32 p = 0x0;
i32 digits = x > 0x1869F ? 0x6 :
x > 0x270F ? 0x5 :
x > 0x3E7 ? 0x4 :
x > 0x63 ? 0x3 :
x > 0x9 ? 0x2 : 0x1;
for(i32 i = ~-digits; ~i; --i)
{
outBuffer[p + i] = x % 0xA + 0x30;
x = x / 0xA;
}
p = p + digits; outBuffer[p++] = 0xA;
}
i32 main()
{
freopen("matrice5.in", "r", stdin);
freopen("matrice5.out", "w", stdout);
i32 T, N, M, P, K;
read(T);
do
{
read(N); read(M); read(P); read(K);
itoa((expo(P * K % 10007, (M - 1) * (N - 1)) * expo(P, M + N - 1)) % 10007);
}while(--T);
puts(outBuffer);
return 0;
}