/* package whatever; // don't place package name! */
import java.util.* ;
import java.lang.* ;
import java.io.* ;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone {
int n
= Integer .
parseInt ( br.
readLine ( ) .
trim ( ) ) ; String [ ] arr_a
= br.
readLine ( ) .
split ( " " ) ; int [ ] a = new int [ n] ;
for ( int i_a= 0 ; i_a< arr_a.length ; i_a++ )
{
a
[ i_a
] = Integer .
parseInt ( arr_a
[ i_a
] ) ; }
long out_ = solve( a) ;
wr.close ( ) ;
br.close ( ) ;
}
static long solve( int [ ] a) {
// Write your code here
int i,j;
long s= 0 ;
double mod = 10000000011.0 ;
for ( i= 0 ; i< a.length ; i++ ) {
j = bitset( a[ i] ) ;
System .
out .
println ( "power " + power
( j,i
+ 1 ,mod
) ) ; s = ( long ) ( ( s + power( ( long ) ( j) ,i+ 1 ,mod) ) ) ;
}
return ( long ) ( s% mod) ;
}
static int bitset( int x) {
int count = 0 ;
while ( x!= 0 ) {
x = x& ( x- 1 ) ;
count++;
}
return count;
}
static long power( long x, int y,double p) {
long res = 1 ; // Initialize result
while ( y > 0 )
{
// If y is odd, multiply x with result
if ( y% 2!= 0 )
res = ( long ) ( ( ( res% p) * x) % p) ;
// y must be even now
y = y>> 1 ; // y = y/2
x = ( long ) ( ( x* x) % p) ;
}
return ( long ) ( res% p) ;
}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgovKiBOYW1lIG9mIHRoZSBjbGFzcyBoYXMgdG8gYmUgIk1haW4iIG9ubHkgaWYgdGhlIGNsYXNzIGlzIHB1YmxpYy4gKi8KY2xhc3MgSWRlb25lIHsKICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBJT0V4Y2VwdGlvbiB7CiAgICAgICAgQnVmZmVyZWRSZWFkZXIgYnIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKFN5c3RlbS5pbikpOwogICAgICAgIFByaW50V3JpdGVyIHdyID0gbmV3IFByaW50V3JpdGVyKFN5c3RlbS5vdXQpOwogICAgICAgICBpbnQgbiA9IEludGVnZXIucGFyc2VJbnQoYnIucmVhZExpbmUoKS50cmltKCkpOwogICAgICAgICBTdHJpbmdbXSBhcnJfYSA9IGJyLnJlYWRMaW5lKCkuc3BsaXQoIiAiKTsKICAgICAgICAgaW50W10gYSA9IG5ldyBpbnRbbl07CiAgICAgICAgIGZvcihpbnQgaV9hPTA7IGlfYTxhcnJfYS5sZW5ndGg7IGlfYSsrKQogICAgICAgICB7CiAgICAgICAgIAlhW2lfYV0gPSBJbnRlZ2VyLnBhcnNlSW50KGFycl9hW2lfYV0pOwogICAgICAgICB9CgogICAgICAgICBsb25nIG91dF8gPSBzb2x2ZShhKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKG91dF8pOwoKICAgICAgICAgd3IuY2xvc2UoKTsKICAgICAgICAgYnIuY2xvc2UoKTsKICAgIH0KICAgIHN0YXRpYyBsb25nIHNvbHZlKGludFtdIGEpewogICAgICAgIC8vIFdyaXRlIHlvdXIgY29kZSBoZXJlCiAgICAgICAgaW50IGksajsKICAgICAgICBsb25nIHM9MDsKICAgICAgICBkb3VibGUgbW9kID0gMTAwMDAwMDAwMTEuMDsKICAgICAgICBmb3IoaT0wO2k8YS5sZW5ndGg7aSsrKXsKICAgICAgICAgICAgaiA9IGJpdHNldChhW2ldKTsKICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJqICAgICAiICsgaik7CiAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigicG93ZXIgICAgIiArIHBvd2VyKGosaSsxLG1vZCkpOwogICAgICAgICAgICBzID0obG9uZykgKChzICsgcG93ZXIoKGxvbmcpKGopLGkrMSxtb2QpKSk7CiAgICAgICAgICAgIAogICAgICAgIH0KICAgICAgICByZXR1cm4gKGxvbmcpIChzJW1vZCk7CiAgICB9CiAgICAKICAgIHN0YXRpYyBpbnQgYml0c2V0KGludCB4KXsKICAgICAgICBpbnQgY291bnQgPSAwOwogICAgICAgIHdoaWxlKHghPTApewogICAgICAgICAgICB4ID0geCYoeC0xKTsKICAgICAgICAgICAgY291bnQrKzsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGNvdW50OwogICAgfQogICAgCiAgICBzdGF0aWMgbG9uZyBwb3dlcihsb25nIHgsIGludCB5LGRvdWJsZSBwKXsKICAgICAgICAKICAgICAgICBsb25nIHJlcyA9IDE7ICAgICAgLy8gSW5pdGlhbGl6ZSByZXN1bHQKIAogICAgCiAgICB3aGlsZSAoeSA+IDApCiAgICB7CiAgICAgICAgLy8gSWYgeSBpcyBvZGQsIG11bHRpcGx5IHggd2l0aCByZXN1bHQKICAgICAgICBpZiAoeSUyIT0gMCkKICAgICAgICAgICAgcmVzID0obG9uZykgKCgocmVzJXApKngpICUgcCk7CiAKICAgICAgICAvLyB5IG11c3QgYmUgZXZlbiBub3cKICAgICAgICB5ID0geT4+MTsgLy8geSA9IHkvMgogICAgICAgIHggPShsb25nKSAgKCh4KngpJXApOyAgCiAgICB9CiAgICByZXR1cm4gKGxvbmcpIChyZXMlIHApOwogICAgICAgIAogICAgfQp9