#include <bits/stdc++.h>
#include "scales.h"
using namespace std;
#define ll long long
#define FOR(i, l, r) for(int i = l; i <= r; i++)
#define FORD(i, l, r) for(int i = l; i >= r; i--)
#define db double
#define ldb long double
#define all_1(x) (x).begin() + 1, (x).end()
#define all(x) (x).begin(), (x).end()
#define ins insert
#define pb push_back
template<typename T>void debug_var(const T& var, const string& name){
cerr << name << ": " << var << "\n";
}
template<typename T>void debug_1d(const T& vt, const string& name){
if(vt.empty()){
cerr << name << " is empty!\n";
return;
}
FOR(i, 0, (int)vt.size() - 1){
cerr << name << "[" << i << "]: " << vt[i] << "\n";
}
}
const ll oo = 2e18;
void init(int T) {
}
/*
int getHeaviest(int a, int b, int c){
cout << "Heavy " << a << " " << b << " " << c << "\n";
cout.flush();
int ans;
cin >> ans;
return ans;
}
int getLightest(int a, int b, int c){
cout << "Lightest " << a << " " << b << " " << c << "\n";
cout.flush();
int ans;
cin >> ans;
return ans;
}
int getMedian(int a, int b, int c){
cout << "median " << a << " " << b << " " << c << "\n";
cout.flush();
int ans;
cin >> ans;
return ans;
}
int getNextLightest(int a, int b, int c, int d){
cout << "Next Lightest " << a << " " << b << " " << c << " " << d << "\n";
cout.flush();
int ans;
cin >> ans;
return ans;
}
*/
void answer(int W[]){
FOR(i, 0, 5) cout << W[i] << " ";
cout.flush();
}
void orderCoins() {
int W[6];
memset(W, 0, sizeof W);
{
//find first 3 elements here
int rep1 = getHeaviest(1, 2, 3);
int rep2 = getLightest(1, 2, 3);
int med = 6 - rep1 - rep2;
W[2] = rep1;
W[0] = rep2;
W[1] = med;
}
FOR(i, 3, 5){
int which_coin = i + 1, pos = -1;
if(i == 3){
int med = getMedian(W[0], W[1], which_coin);
//3 case here
if(med == W[0]){
//coin is smallest
pos = 0;
}
else if(med == which_coin){
pos = 1;
}
else{
//med == W[1], which mean which_coin is > w[1] > w[0]
int med2 = getMedian(W[1], W[2], which_coin);
if(med2 == which_coin) pos = 2;
else pos = 3;
}
}
else if (i == 4) {
int med = getMedian(W[1], W[2], which_coin);
if (med == which_coin) pos = 2;
else if (med == W[1]) {
int med2 = getMedian(W[0], W[1], which_coin);
if (med2 == W[0]) pos = 0;
else pos = 1;
} else {
int med2 = getMedian(W[2], W[3], which_coin);
if (med2 == which_coin) pos = 3;
else pos = 4;
}
}
else if (i == 5) {
int med = getMedian(W[2], W[3], which_coin);
if (med == which_coin) pos = 3;
else if (med == W[3]) {
int med2 = getMedian(W[3], W[4], which_coin);
if (med2 == which_coin) pos = 4;
else pos = 5;
} else {
int med2 = getMedian(W[0], W[1], which_coin);
if (med2 == W[0]) pos = 0;
else if (med2 == which_coin) pos = 1;
else pos = 2;
}
}
for(int j = i; j > pos; j--) W[j] = W[j - 1];
W[pos] = which_coin;
}
answer(W);
}
void solve(){
init(1);
orderCoins();
}
/*
signed main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
int t = 1;
//cin >> t;
while(t--){
solve();
}
return 0;
}
*/