long long powmodfast(long long a, long long b, long long c) {
std::string bin = "";
long long temp = b;
while (temp != 0) {
if (temp % 2 == 0) {
bin = bin + "0";
}
else {
bin = bin + "1";
}
temp = temp / 2;
}
long long wynik = 1;
long long pom[22];
pom[0] = a;
for (long long i = 1; i < bin.length(); i++) {
pom[i] = (pom[i - 1] * pom[i - 1]) % c;
}
for (long long i = 0; i < bin.length(); i++) {
if (bin[i] == '1') {
wynik = (wynik*pom[i]) % c;
}
}
return wynik;
}