#include using namespace std; #define rep(i,n) REP(i,0,n) #define REP(i,s,e) for(int i=(s); i<(int)(e); i++) #define repr(i, n) REPR(i, n, 0) #define REPR(i, s, e) for(int i=(int)(s-1); i>=(int)(e); i--) #define pb push_back #define all(r) r.begin(),r.end() #define rall(r) r.rbegin(),r.rend() #define fi first #define se second typedef long long ll; typedef vector vi; typedef vector vl; typedef pair pii; typedef pair pll; const int INF = 1e9; const ll MOD = 1e9 + 7; double EPS = 1e-8; int main(){ int n; cin >> n; n *= 2; vector a(n); rep(i, n) cin >> a[i]; auto getWet = [&]() { int ret = 0; multiset st; rep(i, n) st.insert(a[i]); while(!st.empty()) { auto p = *st.begin(); st.erase(st.begin()); auto nxt = st.upper_bound(-p); if(nxt != st.end()) { ret++; // cout << " " << p << " " << *nxt << endl; st.erase(nxt); } } return ret; }; auto change = [&]() { rep(i, n) a[i] = -a[i]; }; change(); cout << getWet() << ' '; change(); cout << getWet() << ' '; map mp; rep(i, n) mp[a[i]]++; int cnt = 0; for(auto& p : mp) { // cout << p.fi << " " << p.se << endl; if(p.fi == 0) cnt += p.se / 2; else { cnt += min(p.se, mp[-p.fi]); p.se = 0; } } cout << cnt << endl; return 0; }