#include<iostream>
#include<climits>
using namespace std;
void getMaxValue(int map[4][5],int anser[2][5]){
for(int i =0;i<5;i++){
//找出一列中最大的数及其列号
int temp1 = INT_MIN;
int count1 = INT_MIN;
for(int j =0;j<4;j++){
if(map[j][i]>temp1){
temp1 = map[j][i];
count1 = j;
}
}
map[count1][i] = INT_MIN;
//找出一列中第二大的数及其下标
int temp2 = INT_MIN;
int count2 = INT_MIN;
for(int j =0;j<4;j++){
if(map[j][i]>temp2){
temp2 = map[j][i];
count2 = j;
}
}
map[count2][i] = INT_MIN;
//将其按照正确的顺序回填到我们的要求的数组中
if(count1>count2){
anser[0][i] = temp2;
anser[1][i] = temp1;
}else{
anser[0][i] = temp1;
anser[1][i] = temp2;
}
}
}
/*
*最大的两个数
* */
int main(){
while(1){
int map[4][5];
int anser[2][5];
for(int i = 0;i<4;i++){
for(int j = 0;j<5;j++){
int temp = 0;
if(cin>>temp){
map[i][j] = temp;
}else{
return 0;
}
}
}
getMaxValue(map,anser);
//输出我们的结果
for(int i = 0;i<2;i++){
for(int j =0;j<5;j++){
cout<<anser[i][j]<<" ";
}
cout<<endl;
}
}
}