#include <iostream>
#include <iomanip>
using namespace std;
double PowR(double x, unsigned int N)
{
if (N == 0) return 1;
else if (N%2 == 0)
{
double z = PowR(x,N/2);
return z*z;
}
else
return x*PowR(x,N-1);
}
double PowI(double x, unsigned int N)
{
double res = 1.0;
while(N)
{
if (N%2) res *= x;
x = x*x;
N /= 2;
}
return res;
}
int main()
{
for(unsigned int i = 0; i < 16; ++i)
cout << setw(2) << i << setw(10) << PowR(2,i) << setw(10) << PowI(2,i) << "\n";
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8aW9tYW5pcD4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpkb3VibGUgUG93Uihkb3VibGUgeCwgdW5zaWduZWQgaW50IE4pCnsKICAgIGlmIChOID09IDApIHJldHVybiAxOwogICAgZWxzZSBpZiAoTiUyID09IDApCiAgICB7CiAgICAgICAgZG91YmxlIHogPSBQb3dSKHgsTi8yKTsKICAgICAgICByZXR1cm4geip6OwogICAgfQogICAgZWxzZQogICAgICAgIHJldHVybiB4KlBvd1IoeCxOLTEpOwp9Cgpkb3VibGUgUG93SShkb3VibGUgeCwgdW5zaWduZWQgaW50IE4pCnsKICAgIGRvdWJsZSByZXMgPSAxLjA7CiAgICB3aGlsZShOKQogICAgewogICAgICAgIGlmIChOJTIpIHJlcyAqPSB4OwogICAgICAgIHggPSB4Kng7CiAgICAgICAgTiAvPSAyOwogICAgfQogICAgcmV0dXJuIHJlczsKfQoKaW50IG1haW4oKQp7CiAgICBmb3IodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgMTY7ICsraSkKICAgICAgICBjb3V0IDw8IHNldHcoMikgPDwgaSA8PCBzZXR3KDEwKSA8PCBQb3dSKDIsaSkgPDwgc2V0dygxMCkgPDwgUG93SSgyLGkpIDw8ICJcbiI7Cn0KCg==