unsigned long long quickpow(unsigned long long a, unsigned long long b) { unsigned long long x = 1; while (b) { if (b & 1) x = x * a; b = b >> 1; a = a * a; } return x; }