#include <bits/stdc++.h>
using namespace std;
const int fx[4][2] = {{0, 1}, {0, -1}, {1, 0}, {-1, 0}};
const int fxx[8][2] = {{0, 1}, {0, -1}, {1, 0},  {-1, 0},
                       {1, 1}, {1, -1}, {-1, 1}, {-1, -1}};
#pragma unused(fx)
#pragma unused(fxx)
template <typename T, typename TT>
ostream& operator<<(ostream& s, pair<T, TT> t) {
  return s << "(" << t.first << "," << t.second << ")";
}
template <typename T>
ostream& operator<<(ostream& s, vector<T> t) {
  for (int i = 0; i < (t).size(); i++)
    s << t[i] << ((i < (t).size() - 1) ? " " : "");
  return s;
}
int main() {
  int((n));
  scanf("%d", &((n)));
  vector<int>(a)(n);
  for (int i = 0; i < (n); i++) scanf("%d", &((a)[i]));
  ;
  vector<int> count(110);
  sort((a).begin(), (a).end());
  for (int k = 1; k < n + 1; k++) {
    int t = 1;
    for (int i = 0; i < n; i++) {
      if (a[i] < i / k) {
        t = 0;
        break;
      }
    }
    if (t) {
      cout << k;
      break;
    }
  }
}
