#include <bits/stdc++.h>
using namespace std;
template <typename T>
T maxm(T a, T b) {
  return (a > b) ? a : b;
}
template <typename T>
T minm(T a, T b) {
  return (a < b) ? a : b;
}
template <class T>
inline T gcd(const T& a, const T& b) {
  return (b == 0) ? a : gcd(b, a % b);
}
int main() {
  long long n;
  cin >> n;
  long long* a = new long long[n];
  bool* c = new bool[n];
  for (long long i = (0); i < (n); ++i) scanf("%lld", &a[i]);
  long long* b = new long long[101];
  bool* d = new bool[101];
  for (long long i = (0); i < (101); ++i) {
    b[i] = 0;
    d[i] = false;
  }
  for (long long i = (0); i < (n); ++i) c[i] = false;
  sort(a, a + n);
  long long index = 0;
  while (index < 101) {
    for (long long i = (0); i < (n); ++i) {
      if (!c[i] && a[i] >= b[index]) {
        if (d[index]) {
          if (a[i] == 0) {
          } else {
            c[i] = true;
            b[index] += 1;
          }
        } else {
          c[i] = true;
          b[index] += 1;
          d[index] = true;
        }
      }
    }
    index++;
  }
  long long count = 0;
  for (long long i = (0); i < (101); ++i) {
    if (d[i]) count++;
  }
  cout << count << endl;
  return 0;
}
