#include<bits/stdc++.h>
using namespace std;

#include<atcoder/all>
using namespace atcoder;
using mint=atcoder::modint998244353;

#pragma GCC optimize("O3")
#pragma GCC optimize("unroll-loops")

signed main(){
	int N;cin>>N;

	int x=-1,y=-1;

	{
		int l=-1e8,r=1e8;
		
		while(r-l>2){
			int nl=(2*l+r)/3,nr=(l+2*r)/3;

			cout<<1<<" "<<nl<<" "<<0<<endl;
			int retl;cin>>retl;
			cout<<1<<" "<<nr<<" "<<0<<endl;
			int retr;cin>>retr;

			if(retl>retr){
				r=nr;
			}else{
				l=nl;
			}
		}

		int min_cost=1e18;

		for(int i=l;i<=r;i++){
			cout<<1<<" "<<l<<" "<<0<<endl;
			int ret;cin>>ret;
			if(min_cost>ret){
				min_cost=ret;
				x=i;
			}
		}
	}

	{
		int l=-1e8,r=1e8;
		
		while(r-l>2){
			int nl=(2*l+r)/3,nr=(l+2*r)/3;

			cout<<1<<" "<<0<<" "<<nl<<endl;
			int retl;cin>>retl;
			cout<<1<<" "<<0<<" "<<nr<<endl;
			int retr;cin>>retr;

			if(retl>retr){
				r=nr;
			}else{
				l=nl;
			}
		}

		int min_cost=1e18;

		for(int i=l;i<=r;i++){
			cout<<1<<" "<<0<<" "<<l<<endl;
			int ret;cin>>ret;
			if(min_cost>ret){
				min_cost=ret;
				y=i;
			}
		}
	}

	cout<<2<<" "<<x<<" "<<y<<endl;
}