There is a special number sequence which has n+1 integers. For each number in sequence, we have two rules:

● a i ∈ 0,n0,n

● a i ≠ a j( i ≠ j )

For sequence a and sequence b, the integrating degree t is defined as follows(“�” denotes exclusive or):

t = (a 0 � b 0) + (a 1 � b 1) +・・・+ (a n � b n)

(sequence B should also satisfy the rules described above)

Now give you a number n and the sequence a. You should calculate the maximum integrating degree t and print the sequence b.

Input

There are multiple test cases. Please process till EOF.

For each case, the first line contains an integer n(1 ≤ n ≤ 10 5), The second line contains a 0,a 1,a 2,…,a n.

Output

For each case, output two lines.The first line contains the maximum integrating degree t. The second line contains n+1 integers b 0,b 1,b 2,…,b n. There is exactly one space between b i and b i+1 (0 ≤ i ≤ n - 1). Don’t ouput any spaces after b n.

Sample Input

4

2 0 1 4 3

Sample Output

20

1 0 2 3 4

#include<map>
#include<set>
#include<queue>
#include<stack>
#include<vector>
#include<math.h>
#include<cstdio>
#include<sstream>
#include<numeric>//STL数值算法头文件
#include<stdlib.h>
#include <ctype.h>
#include<string.h>
#include<iostream>
#include<algorithm>
#include<functional>//模板类头文件
using namespace std; typedef long long ll;
const int maxn=110000;
const int INF=0x3f3f3f3f; ll a[maxn];
ll d[maxn];
int main()
{
ll n;
while(~scanf("%I64d",&n))
{
for(ll i=0; i<=n; i++)
scanf("%I64d",&a[i]);
memset(d,-1,sizeof(d));
ll ans=0;
for(ll i=n; i>=0; i--)
{
ll t=0;
if(d[i]==-1)
{
for(ll j=0;; j++)
{
if(!(i&(1<<j))) t+=(1<<j);
if(t>=i)
{
t-=(1<<j);
break;
}
}
ans+=(i^t)*2;
d[i]=t;
d[t]=i;
}
}
printf("%I64d\n",ans);
for(ll i=0; i<=n; i++)
printf(i==n?"%I64d\n":"%I64d ",d[a[i]]);
}
return 0;
}

最新文章

  1. C#软件设计——小话设计模式原则之:依赖倒置原则DIP
  2. Linux下C高手成长过程
  3. 局部变量&amp;&amp;malloc函数&amp;&amp;生命周期的一些见解
  4. 剑指offer-二叉树的深度
  5. fastJSON☞JSONParameters☞时区的修改☞时间最后有一个&quot;Z&quot;
  6. 解决VMware下安装Ubuntu15不支持1920X1080分辨率的问题
  7. [phonegap]安装phonegap
  8. Checking the content of the pointer
  9. SPRING IN ACTION 第4版笔记-第十章Hitting the database with spring and jdbc-002-本章的源代码
  10. thymelef 布局 fragment
  11. python高级编程(第12章:优化学习)3
  12. Java自带的性能监测工具用法简介——jstack、jconsole、jinfo、jmap、jdb、jsta、jvisualvm
  13. .NET Core在WindowsServer服务器部署及发布
  14. [51nod1410]回文调整
  15. 用pandas库修改excel文件里的内容,并把excel文件格式存为csv格式,再将csv格式改为html格式
  16. 哈尔特征Haar
  17. php编程 之 php进阶练习
  18. linux之tree命令
  19. Java8学习笔记(十)--自定义收集器
  20. 使用 IntraWeb (2) - Hello IntraWeb

热门文章

  1. 【bzoj2038-小z的袜子】莫队算法
  2. 【20151105noip膜你赛】bzoj3652 bzoj3653
  3. 【NOIP】提高组2015 子串
  4. Docker explainations
  5. Fire! (双bfs+预处理)
  6. perl HTML::LinkExtor模块(1)
  7. 蓝屏代码0X0000007B可能是SATA mode问题
  8. Mysql SQL 优化
  9. django的事务
  10. 安装Hadoop2.7和hive2.0以及redis