#include<bits/stdc++.h>
using namespace std;
#include "gap.h"
// static void my_assert(int k){ if (!k) exit(1); }
// static int subtask_num, N;
// static long long A[100001];
// static long long call_count;
// long long findGap(int, int);
// void MinMax(long long s, long long t, long long *mn, long long *mx)
// {
// int lo = 1, hi = N, left = N+1, right = 0;
// my_assert(s <= t && mn != NULL && mx != NULL);
// while (lo <= hi){
// int mid = (lo+hi)>>1;
// if (A[mid] >= s) hi = mid - 1, left = mid;
// else lo = mid + 1;
// }
// lo = 1, hi = N;
// while (lo <= hi){
// int mid = (lo+hi)>>1;
// if (A[mid] <= t) lo = mid + 1, right = mid;
// else hi = mid - 1;
// }
// if (left > right) *mn = *mx = -1;
// else{
// *mn = A[left];
// *mx = A[right];
// }
// if (subtask_num == 1) call_count++;
// else if (subtask_num == 2) call_count += right-left+2;
// }
// int main()
// {
// FILE *in = stdin, *out = stdout;
// my_assert(2 == fscanf(in, "%d%d", &subtask_num, &N));
// my_assert(1 <= subtask_num && subtask_num <= 2);
// my_assert(2 <= N && N <= 100000);
// for (int i=1;i<=N;i++) my_assert(1 == fscanf(in, "%lld", A+i));
// for (int i=1;i<N;i++) my_assert(A[i] < A[i+1]);
// fprintf(out, "%lld\n", findGap(subtask_num, N));
// fprintf(out, "%lld\n", call_count);
// return 0;
// }
long long findGap(int T, int N)
{
#define ll long long
if(T == 1){
vector<ll>vec(N);
ll s = 0;
ll t = LLONG_MAX;
for(int i = 0;i < N/2;i++){
ll mn,mx;
MinMax(s,t,&mn,&mx);
vec[i] = mn;
vec[N-i-1] = mx;
s = mn+1;
t = mx-1;
}
if(N & 1){
ll mn,mx;
MinMax(s,t,&mn,&mx);
vec[N/2] = mn;
}
// for(int i = 0;i < N;i++) cout << vec[i] << ' ';
// cout << '\n';
ll mn = 0;
for(int i = 0;i < N-1;i++){
mn = max(mn,vec[i+1] - vec[i]);
}
return mn;
}
else{
vector<int>vec(N);
int s = 0;
for(int i = 0;i < N;i++){
ll mn,mx;
MinMax(s,s+1,&mn,&mx);
if(mn < s) swap(mn,mx);
cout << mn << ' ' << mx << '\n';
vec[i] = mn;
s = mn + 1;
}
int mn = 0;
for(int i = 0;i < N-1;i++){
mn = min(mn,vec[i+1] - vec[i]);
}
return mn;
}
return 0;
}