//EGOI 2023 Guessing Game
//https://qoj.ac/contest/1355/problem/7161
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using vll = vector<ll>;
const ll MAXN = 100000;
const ll MOD = MAXN/2;
void encode(ll n){
ll a, sum=0; vector<bool> vis(n,false);
vll A; vector<bool> vis2(32,false);
cout << 7 << endl;
for(int i=0; i<n-1; i++){
if(i==MAXN-32) for(int j=0; j<n; j++) if(!vis[j]) A.push_back(j), sum=(sum+j)%MOD;
cin >> a; vis[a]=true; ll res=0;
if(i<MAXN-32){cout << 7 << endl; continue;}
auto id=find(A.begin(),A.end(),a)-A.begin(); vis2[id]=true;
for(int k=5; k>=1; k--){
ll l=(id>>k)<<k, r=l+(1ll<<k)-1; bool flag=true;
for(int j=l; j<=r; j++) if(!vis2[j]){flag=false; break;}
if(flag){res=k; break;}
}
if(res!=0) cout << 5-res << endl;
else cout << 5+((sum>>(id/2))&1) << endl;
}
}
pair<ll,ll> solve(ll delta,ll lx,ll rx,vll &val,vll &ID){
if(rx-lx==2) return {ID[lx],ID[lx+1]};
vll A; ll m=(lx+rx)/2;
for(int i=lx; i<rx; i++) if(val[i]==delta) A.push_back(i);
if(A.size()==2) return {ID[A[0]],ID[A[1]]};
if(A[0]<m) return solve(delta+1,m,rx,val,ID);
return solve(delta+1,lx,m,val,ID);
}
void decode(ll n){
vll A(n), B, C(32);
for(int i=0; i<n; i++){
cin >> A[i];
if(A[i]!=7) B.push_back(i);
}
if(B.size()==31){
ll sum1=0, sum2=0, cur=0;
for(auto a:B){
sum1+=(A[a]==6?1:0)*(1ll<<cur); sum2=(sum2+a)%MOD; cur+=(A[a]==5 || A[a]==6);
}
ll ans=(sum1-sum2+MOD)%MOD;
cout << ans << " " << ans+MOD << endl; return;
}
for(int i=0; i<32; i++) C[i]=min(5ll,A[B[i]]);
auto [ans1,ans2]=solve(1,0,32,C,B);
cout << ans1 << " " << ans2 << endl;
}
int main(){
ll p, n;
cin >> p >> n;
if(p==1) encode(n);
else decode(n);
return 0;
}