#include <bits/stdc++.h>
using namespace std;
const int modulo = 1e9 + 7;
template <class __Ty>
bool mini(__Ty& a, __Ty b) {
  return a > b ? ((a = b) | 1) : (0);
}
template <class __Ty>
bool maxi(__Ty& a, __Ty b) {
  return a < b ? ((a = b) | 1) : (0);
}
template <class __Ty>
__Ty add(__Ty a, __Ty b) {
  return (a + b) % (__Ty(modulo));
}
template <class __Ty>
__Ty sub(__Ty a, __Ty b) {
  __Ty m(modulo);
  return ((a - b) % m + m) % m;
}
const int N = 1e2 + 5;
int a[N], n, f[N];
bool check(int c) {
  queue<int> q;
  for (int i = 1; i <= n; ++i) q.push(a[i]);
  for (int i = 1; i <= c; ++i) f[i] = 1e9 + 7;
  while (!q.empty()) {
    for (int i = 1; i <= c; ++i)
      if (!q.empty()) {
        int u = q.front();
        q.pop();
        if (f[i] == 0) return false;
        f[i] = min(f[i] - 1, u);
      }
  }
  return true;
}
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cin >> n;
  for (int i = 1; i <= n; ++i) cin >> a[i];
  sort(a + 1, a + 1 + n, greater<int>());
  for (int i = 1; i <= n; ++i)
    if (check(i)) {
      cout << i;
      return 0;
    }
  return 0;
}
