#include <algorithm>
#include <cfloat>
#include <climits>
#include <cmath>
#include <complex>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <functional>
#include <iostream>
#include <map>
#include <memory>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <string>
#include <utility>
#include <vector>
 
using namespace std;
 
#define sz size()
#define pb push_back
#define mp make_pair
#define fi first
#define se second
#define all(c) (c).begin(), (c).end()
#define rep(i,a,b) for(int i=(a);i<(b);++i)
#define clr(a, b) memset((a), (b) ,sizeof(a))
 
#define MOD 1000000007

unsigned int xor128(void) { 
  static unsigned int x = 123456789;
  static unsigned int y = 362436069;
  static unsigned int z = 521288629;
  static unsigned int w = 88675123; 
  unsigned int t;
 
  t = x ^ (x << 11);
  x = y; y = z; z = w;
  return w = (w ^ (w >> 19)) ^ (t ^ (t >> 8)); 
}

int main(){
  while(1){
    set<int> se;
    while(se.sz<4){
      se.insert(xor128()%10);
    }
    vector<int> v(all(se));
    rep(i,0,3)cout << v[i] << " ";
    cout << v[3] << endl;
    int a,b;
    cin>>a>>b;
    if(a+b==4){
      sort(all(v));
      do{
        rep(i,0,3)cout << v[i] << " ";
        cout << v[3] << endl;
        int a,b;
        cin>>a>>b;
        if(a==4)goto en;
      }while(next_permutation(all(v)));
    }
  }
  en:;
  return 0;
}