#include <bits/stdc++.h>
using namespace std;
long long MOD = 1e9 + 7;
std::vector<long long> se(std::vector<long long> v) {
  std::vector<long long> v1;
  for (long long i = 0; i < v.size(); ++i) {
    if (v1.empty() || v1.back() != v[i]) {
      v1.push_back(v[i]);
    }
  }
  return v1;
}
void prinvector(std::vector<long long> v) {
  for (long long i = 0; i < v.size(); ++i) {
    cout << v[i] << " ";
  }
  cout << " " << endl;
}
void prinarray(long long a[], long long n) {
  for (long long i = 0; i < n; ++i) {
    cout << a[i] << " ";
  }
  cout << " " << endl;
}
void p1(long long x) { cout << x << endl; }
void p2(long long x) { cout << x << " "; }
void p3(long long x) { cout << x; }
void solve() {
  long long n;
  cin >> n;
  std::vector<long long> v[100];
  std::vector<long long> a;
  for (long long i = 0; i < n; ++i) {
    long long x;
    cin >> x;
    a.push_back(x);
  }
  sort(a.begin(), a.end());
  for (long long i = 0; i < n; ++i) {
    for (long long j = 0; j < 100; ++j) {
      if (v[j].empty() || v[j].size() <= a[i]) {
        v[j].push_back(a[i]);
        break;
      }
    }
  }
  long long s = 0;
  for (long long i = 0; i < 100; ++i) {
    n = v[i].size();
    s += min((long long)1, n);
  }
  cout << s << endl;
}
int32_t main() {
  ios::sync_with_stdio(false);
  cin.tie(NULL);
  cout.precision(10);
  solve();
  return 0;
}
