//A
#include <iostream>
#include <algorithm>
#include <stdio.h>
using namespace std;
const int maxn=1e2+5;
void solve(){
int a[maxn];
pair<int,int> pa[maxn];
int n;
while(cin>>n){
if(n==0) return;
for(int i=0;i<n;i++) cin>>a[i];
for(int i=0;i<n;i++) pa[i]=make_pair(abs(a[i]),a[i]);
sort(pa,pa+n);
printf("%d",pa[n-1].second);
for(int i=n-2;i>=0;i--) printf(" %d",pa[i].second);
printf("\n");
}
}
int main(){
solve();
return 0;
}
//B
#include <iostream>
#include <algorithm>
#include <stdio.h>
using namespace std;
const int maxn=4e4;
int large[16000000];
void solve(){
int a[4][maxn];
int n;
scanf("%d",&n);
for(int i=0;i<n;i++) scanf("%d%d%d%d",&a[0][i],&a[1][i],&a[2][i],&a[3][i]);
for(int i=0;i<n;i++) for(int j=0;j<n;j++) large[i*n+j]=a[0][i]+a[1][j];
sort(large,large+n*n);
long long ans=0;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
int t=a[2][i]+a[3][j];
ans+=upper_bound(large,large+n*n,-t)-lower_bound(large,large+n*n,-t);
}
}
printf("%d\n",ans);
}
int main(){
solve();
return 0;
}
/C
#include <iostream>
#include <queue>
#include <stdio.h>
using namespace std;
const int maxn=2e4;
void solve(){
int n;
scanf("%d",&n);
priority_queue<int,vector<int>,greater<int> > myheap;
int t;
for(int i=0;i<n;i++){
scanf("%d",&t);
myheap.push(t);
}
if(n==1){
printf("%d\n",myheap.top());
return;
}
long long ans=0;
while(myheap.size()>1){
int num1=myheap.top();
myheap.pop();
int num2=myheap.top();
myheap.pop();
ans+=num1+num2;
myheap.push(num1+num2);
}
printf("%lld\n",ans);
}
int main(){
solve();
return 0;
}
//D
#include <iostream>
#include <algorithm>
#include <stdio.h>
using namespace std;
const int maxn=1e3+5;
void solve(){
char s[maxn];
while(scanf("%s",&s)!=EOF){
int index=0,now=0,count=0;
int ans[maxn],ansnum=0;
while(s[index]){
if(s[index]=='5'){
if(count){
ans[ansnum++]=now;
count=0;
now=0;
}
}
else{
count++;
now=now*10+s[index]-'0';
}
index++;
}
if(count) ans[ansnum++]=now;
sort(ans,ans+ansnum);
printf("%d",ans[0]);
for(int i=1;i<ansnum;i++) printf(" %d",ans[i]);
printf("\n");
}
}
int main(){
solve();
return 0;
}
//E
#include <stdio.h>
#include <queue>
using namespace std;
struct treenode{
int data;
treenode *parent;
bool operator <(treenode a) const { return data < a.data; }
bool operator >(treenode a) const { return data > a.data; }
};
int deep(treenode* i){
if(i->parent==NULL) return 0;
return 1+deep(i->parent);
}
const int maxn=1e5+5;
int main(){
int t;
scanf("%d",&t);
while(t--){
int m;
scanf("%d",&m);
char s[maxn];
scanf("%s",&s);
float count[26];
for(int i=0;i<26;i++) count[i]=0;
int index=0;
while(s[index]){
count[s[index]-'a']+=1;
index++;
}
int a[26],anum=0;
for(int i=0;i<26;i++) if(count[i]) a[anum++]=count[i];
treenode base[anum*2];
int nowbasenum=anum;
for(int i=0;i<anum;i++){
base[i].data=a[i];
base[i].parent=NULL;
}
priority_queue<treenode*,vector<treenode*>,greater<treenode*> > que;
for(int i=0;i<anum;i++) que.push(&base[i]);
int ans=0;
if(que.size()==1){
ans=que.top()->data;
}
else{
while(que.size()>1){
treenode* num1=que.top();
que.pop();
treenode* num2=que.top();
que.pop();
base[nowbasenum].data=num1->data+num2->data;
base[nowbasenum].parent=NULL;
num1->parent=&base[nowbasenum];
num2->parent=&base[nowbasenum];
que.push(&base[nowbasenum++]);
}
for(int i=0;i<anum;i++) ans+=base[i].data*deep(&base[i]);
}
if(ans<=m) printf("yes\n");
else printf("no\n");
}
return 0;
}
//G
#include <iostream>
#include <stdio.h>
#include <algorithm>
using namespace std;
const int maxn=1e3+5;
bool norepeat(int a1,int a2,int b1,int b2){
if(a1==b1||a1==b2||a2==b1||a2==b2) return false;
return true;
}
bool comp(const pair<int,int> &a,const pair<int,int> &b){
return a.first<b.first;
}
pair<int,int > pa[1000005];
const int inf=1136870912;
void solve(){
int n;
int a[maxn];
while(scanf("%d",&n)){
if(n==0) break;
for(int i=0;i<n;i++) scanf("%d",&a[i]);
sort(a,a+n);
int count=0;
for(int i=0;i<n-1;i++) for(int j=i+1;j<n;j++) pa[count++]=make_pair(a[i]+a[j],a[i]);
sort(pa,pa+count,comp);
int ans=-inf;
for(int i=n-1;i>=1&&ans==-inf;i--){
for(int j=i-1;j>=0&&ans==-inf;j--){
pair<int,int> tpa=make_pair(a[i]-a[j],0);
int l=lower_bound(pa,pa+count,tpa,comp)-pa,r=upper_bound(pa,pa+count,tpa,comp)-pa;
for(int k=l;k<r;k++){
if(norepeat(pa[k].second,pa[k].first-pa[k].second,a[i],a[j])){
ans=std::max(ans,a[i]);
}
}
}
}
if(ans==-inf) printf("no solution\n");
else printf("%d\n",ans);
}
}
int main(){
solve();
return 0;
}