# Include <stdio. h>
Long begin [5001], end [5001];
Long maxw = 0, maxf = 0;
Long lastend;
Long max (long X, long y)
{
If (x> Y) Return (X );
Else return (y );
}
Long qsort (long lx, long RX)
{
Long I, j, TB, Te;
I = Lx;
J = RX;
TB = begin [lx];
Te = end [lx];
Do
{
While (begin [J]> TB) & (j> I ))
J --;
If (I <j)
{
Begin [I] = begin [J];
End [I] = end [J];
I ++;
}
While (begin [I] <TB) & (j> I ))
I ++;
If (I <j)
{
Begin [J] = begin [I];
End [J] = end [I];
J --;
}
} While (I <j );
Begin [I] = Tb;
End [I] = tE;
I ++;
J --;
If (j> lx) qsort (LX, J );
If (I <RX) qsort (I, RX );
Return (0 );
}
Main ()
{
File * In = fopen ("milk2.in", "R ");
File * out = fopen ("milk2.out", "W ");
Long N;
Long I, J;
Fscanf (in, "% d", & N );
For (I = 1; I <= N; I ++)
Fscanf (in, "% d", & begin [I], & End [I]);
Qsort (1, N );
For (I = 1; I <n; I ++)
{
For (j = I + 1; j <= N; j ++)
If (end [I]> = begin [J]) & (end [I] <= end [J])
End [I] = end [J];
}
For (I = 1; I <= N; I ++)
Maxw = max (maxw, end [I]-begin [I]);
For (I = 2; I <= N; I ++)
{
Lastend = 0;
For (j = 1; j <I; j ++)
{
Lastend = max (lastend, end [J]);
}
Maxf = max (maxf, begin [I]-lastend );
}
Fprintf (Out, "% d \ n", maxw, maxf );
Fclose (in );
Fclose (out );
Exit (0 );
}