n=int(input())
a=[]
max_j=0
max_nj=0
for _ in range(n):
s,e=list(map(int,input().split()))a.append([s,e])
# print(a)
# 区间合并
a=sorted(a,key=lambda x:x[0])
merged=[]
for interval in a:
if not merged:
merged.append((interval))
max_j=interval[1]-interval[0]elif interval[0]>merged[-1][-1]:
max_nj = max(max_nj, interval[0] - merged[-1][-1])
merged.append((interval))else:
merged[-1][-1]=max(merged[-1][-1],interval[1])
max_j=max(max_j,merged[-1][-1]-merged[-1][0])
max_j=max(max_j,merged[-1][-1]-merged[-1][0])
print(f'{max_j} {max_nj}')
def gcd(a, b):
while b:
a, b = b, a % b
return a
n = int(input())
res = []
for i in range(n + 1):
for j in range( i + 1):
if gcd(i, j) == 1:
res.append([i, j])
res.sort(key=lambda x:x[1]/x[0])
for i in res:
print(f'{i[1]}/{i[0]}')
n=int(input()) def dfs(a,b,c,d): if (a+c>n): return dfs(a,b,a+c,b+d) print(f'{b+d}/{a+c}') dfs(a+c,b+d,c,d) print("0/1") dfs(1,0,1,1) print("1/1")