#include using namespace std; struct node { int start, end; bool operator<(node b) { return start < b.start; } node() { start = end = 0; } } a[5005]; int main() { int n, start, end, ans1 = 0, ans2 = 0; cin >> n; for (int i = 0; i < n; i++) { cin >> a[i].start >> a[i].end; } sort(a, a + n); start = a[0].start; end = a[0].end; for (int i = 1; i < n; i++) { if (a[i].start <= end) { end = max(end, a[i].end); } else { ans1 = max(ans1, end - start); ans2 = max(ans2, a[i].start - end); start = a[i].start; end = a[i].end; } } ans1 = max(ans1, end - start); cout << ans1 << ' ' << ans2 << endl; return 0; }