#include <bits/stdc++.h>
using namespace std;
const int INF = INT_MAX;
int n;
vector<int> v;
bool comp(int a, int b) { return a > b; }
bool check(int mid) {
  vector<int> f(mid);
  for (int i = 0; i < mid; i++) f[i] = v[i];
  for (int i = mid; i < n; i++) {
    if (f[i % mid] > 0)
      f[i % mid] = min(f[i % mid] - 1, v[i]);
    else {
      bool changed = false;
      for (int j = 0; j < mid; j++)
        if (f[j] > 0) {
          f[j] = min(f[j] - 1, v[i]), changed = true;
          break;
        }
      if (!changed) return false;
    }
  }
  return true;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin >> n;
  v.resize(n);
  for (int i = 0; i < n; i++) cin >> v[i];
  sort(v.begin(), v.end(), comp);
  int l = 1, r = n;
  while (r > l) {
    int mid = (l + r) / 2;
    if (check(mid))
      r = mid;
    else
      l = mid + 1;
  }
  cout << r << endl;
  return 0;
}
