#include <bits/stdc++.h>
using namespace std;
inline bool EQ(double a, double b) { return fabs(a - b) < 1e-9; }
inline int two(int n) { return 1 << n; }
const long long mod = 1e9 + 7;
const int maxn = 1e5 + 5;
long long gcd(long long a, long long b) {
  if (b == 0) return a;
  return gcd(b, a % b);
}
long long lcm(long long a, long long b) { return a * (b / gcd(a, b)); }
long long binexp(long long a, long long b) {
  long long ans = 1;
  while (b) {
    if (b & 1) ans = ans * a % mod;
    b /= 2;
    a = a * a % mod;
  }
  return ans;
}
long long inverse(long long a, long long p) { return binexp(a, p - 2); }
void ingraph(vector<vector<long long> >& graph, long long m) {
  long long x, y;
  for (int i = 0; i < (m); ++i) {
    cin >> x >> y;
    x--, y--;
    graph[x].push_back(y);
    graph[y].push_back(x);
  }
}
void solve();
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  int TC = 1;
  while (TC--) {
    solve();
    cout << "\n";
  }
  return 0;
}
void solve() {
  int n;
  cin >> n;
  string s1, s2;
  cin >> s1 >> s2;
  int a1[10], a2[10];
  memset(a1, 0, sizeof(a1));
  memset(a2, 0, sizeof(a2));
  for (int i = 0; i < (n); ++i) {
    a1[s1[i] - '0']++;
    a2[s2[i] - '0']++;
  }
  int cnt = 0, j = 0;
  for (int i = 0; i < (10); ++i) {
    j = i;
    while (a1[i] > 0 && j < 10) {
      int tmp = min(a2[j], a1[i]);
      a1[i] -= tmp;
      a2[j] -= tmp;
      j++;
    }
    cnt += a1[i];
  }
  cout << cnt << '\n';
  memset(a1, 0, sizeof(a1));
  memset(a2, 0, sizeof(a2));
  for (int i = 0; i < (n); ++i) {
    a1[s1[i] - '0']++;
    a2[s2[i] - '0']++;
  }
  cnt = 0, j = 0;
  for (int i = 0; i < (10); ++i) {
    j = i + 1;
    while (a1[i] > 0 && j < 10) {
      int tmp = min(a2[j], a1[i]);
      a1[i] -= tmp;
      a2[j] -= tmp;
      cnt += tmp;
      j++;
    }
  }
  cout << cnt << '\n';
}
