#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <map>
using namespace std;
typedef long long LL;
const int maxm=125250+5;
map<LL,int>mp;
int n,m;
LL a[maxm],b[maxm];
int main()
{
while(~scanf("%d",&m))
{
for(int i=0;i<m;i++)
{
scanf("%I64d",&b[i]);
mp[b[i]]++;
}
sort(b,b+m);
n=0;
a[0]=b[0];
mp[b[0]]--;
n++;
for(int i=1;i<m;i++)
{
if(mp[b[i]]>0)
{
a[n++]=b[i];
mp[b[i]]--;
for(int j=n-2;j>=0;j--)
{
mp[a[n-1] + a[j]]--;
}
}
}
printf("%d\n",n);
for(int i=0;i<n;i++)
{
printf("%I64d%c",a[i],i==n-1?'\n':' ');
}
}
return 0;
}
#include <cstdio>
#include <iostream>
#include <set>
using namespace std;
typedef long long LL;
const int maxn=125250+5;
int n,m;
int a[maxn];
multiset<LL>b;
multiset<LL>::iterator it;
int main()
{
while(~scanf("%d",&m))
{
b.clear();
LL x;
for(int i=0;i<m;i++)
{
scanf("%I64d",&x);
b.insert(x);
}
n=0;
while(!b.empty())
{
it=b.begin();
a[n++]=*it;
b.erase(it);
for(int i=n-2;i>=0;i--)
{
it=b.find(a[n-1]+a[i]);
b.erase(it);
}
}
printf("%d\n",n);
for(int i=0;i<n;i++)
{
printf("%d%c",a[i],i==n-1?'\n':' ');
}
}
return 0;
}