#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 5;
int a[N];
vector<int> v;
int main() {
int n = 0;
int t;
while (cin >> t)
a[++ n] = t;
for (int i = 1; i <= n; i ++) {
if (v.empty() || v.back() > a[i])
v.push_back(a[i]);
else {
int l = 1, r = v.size();
while (l < r) {
int mid = l + r >> 1;
if (a[mid] > a[i])
l = mid + 1;
else
r = mid;
}
v[l] = a[i];
}
}
cout << v.size() << endl;
v.clear();
for (int i = 1; i <= n; i ++) {
if (!v.size() || v.back() < a[i])
v.push_back(a[i]);
else {
int position = upper_bound(v.begin(), v.end(), a[i]) - v.begin();
v[position] = a[i];
}
}
cout << v.size();
return 0;
}