#include <iostream>
#include <fstream>
#include <stdlib.h>
#define MAXIDO 100000
#define be cin // cin | beFajl
using namespace std;
struct elem{
int kezd = -1;
int veg = -1;
int kov = -1; //index
int elozo = -1; //index
};
struct intervallum{
int kezd;
int veg;
int hossz;
};
int minTomb[MAXIDO+1]; // indexeket tárol
elem memoria[MAXIDO+1]; // előre lefoglalt tömb, futási idő gyorsításáért
int comp(const void* a, const void* b)
{
return memoria[*(int*)a].veg - memoria[*(int*)b].veg;
}
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
ifstream beFajl;
beFajl.open("be2.txt");
int n;
be >> n;
int fele = (n%2 == 0 ? n/2 : n/2+1);
int li = 0;
for(int i=0; i<n; i++){
minTomb[i] = i;
be >> memoria[i].kezd >> memoria[i].veg;
memoria[i].kov = i+1;
memoria[i].elozo = i-1;
}
beFajl.close();
qsort(minTomb,n,sizeof(int),comp);
int lKezd = 0;
li = lKezd;
intervallum ans; // megoldások
ans.kezd = MAXIDO;
ans.veg = 0;
for(int j = 0; j<fele; j++){ // elsõ n/2 ember vizsgálata
if(memoria[li].veg < ans.kezd){
ans.kezd = memoria[li].veg;
}
if(memoria[li].kezd > ans.veg){
ans.veg = memoria[li].kezd;
}
li = memoria[li].kov;
}
if(ans.kezd >= ans.veg){
ans.kezd = ans.veg;
ans.hossz = 1;
cout << ans.hossz << endl << ans.kezd << " " << ans.veg << endl;
return 0;
}
else{
ans.hossz = ans.veg - ans.kezd + 1;
}
int minVeg = ans.kezd; // min kereséssel kapjuk meg
int maxKezd = ans.veg; // max kereséssel kajuk meg, minVeg <= maxKezd
int k=1;
do{
if(minTomb[k] != 0){
memoria[memoria[minTomb[k]].elozo].kov = memoria[minTomb[k]].kov; // átláncolás
}
else{ // 1. elem lekezelése
lKezd = memoria[k].kov;
}
minVeg = memoria[minTomb[k++]].veg;
maxKezd = memoria[li].kezd; // max beállítása
if(maxKezd <= minVeg){
ans.hossz = 1;
ans.kezd = maxKezd;
ans.veg = ans.kezd;
}
else if(maxKezd - minVeg + 1 < ans.hossz){
ans.kezd = minVeg;
ans.veg = maxKezd;
ans.hossz = ans.veg - ans.kezd + 1;
}
li = memoria[li].kov;
}while(memoria[li].kov != -1);
cout << ans.hossz << endl << ans.kezd << " " << ans.veg << endl;
return 0;
}