Description
Little penguin Polo likes permutations. But most of all he likes permutations of integers from 0 to n, inclusive.
For permutation p = p0, p1, …, pn, Polo has defined its beauty — number .
Expression means applying the operation of bitwise excluding “OR” to numbers x and y. This operation exists in all modern programming languages, for example, in language C++ and Java it is represented as “^” and in Pascal — as “xor”.
Help him find among all permutations of integers from 0 to n the permutation with the maximum beauty.
Input
The single line contains a positive integer n (1 ≤ n ≤ 106).
Output
In the first line print integer m the maximum possible beauty. In the second line print any permutation of integers from 0 to n with the beauty equal to m.
If there are several suitable permutations, you are allowed to print any of them.
Sample Input
Input
4
Output
20
0 2 1 4 3
#include<iostream>
#include<cstring>
#include<cstdio>
typedef __int64 ll;
using namespace std;
ll result[1000010];
ll n;
int main()
{
while(scanf("%I64d",&n)!=EOF)
{
ll k=1;
while(k<=n)
k*=2;
k--;
memset(result,-1,sizeof(result));
for(int i=n; i>=0; i--)
{
if(result[i]!=-1)
continue;
else
{
while((k^i)>n||result[k^i]!=-1)
k/=2;
result[k^i]=i;
result[i]=k^i;
}
}
ll sum=0;
for(int j=0; j<=n; j++)
sum+=j^result[j];
printf("%I64d\n",sum);
for(int q=0; q<n; q++)
printf("%I64d ",result[q]);
printf("%I64d\n",result[n]);
}
return 0;
}