#include <bits/stdc++.h>
using namespace std;
int gcdExtended(int a, int b, int *x, int *y) {
  if (a == 0) {
    *x = 0, *y = 1;
    return b;
  }
  int x1, y1;
  int gcd = gcdExtended(b % a, a, &x1, &y1);
  *x = y1 - (b / a) * x1;
  *y = x1;
  return gcd;
}
long long int modInverse(int a, int m) {
  int x, y;
  int g = gcdExtended(a, m, &x, &y);
  long long int res = ((long long int)x % m + (long long int)m) % m;
  return res;
}
long long int poww(long long int a, long long int b) {
  long long int ans = 1;
  for (int i = 1; i <= b; i++) {
    ans *= a;
  }
  return ans;
}
inline long long int max(long long int a, long long int b) {
  if (a > b)
    return a;
  else
    return b;
}
inline long long int min(long long int a, long long int b) {
  if (a > b)
    return b;
  else
    return a;
}
int gcd(int a, int b) {
  if (a == 0) return b;
  if (b == 0) return a;
  if (a == b) return a;
  if (a > b)
    return gcd(a - b, b);
  else
    return gcd(a, b - a);
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(NULL);
  int t = 1;
  while (t--) {
    long long int n, m, k;
    cin >> n;
    int a[n];
    for (int i = 0; i < n; i++) cin >> a[i];
    ;
    sort(a, a + n, greater<int>());
    int b[n];
    for (int i = 0; i < n; i++) b[i] = -1;
    for (int i = 1; i < n + 1; i++) {
      int x = 0, j = 0;
      for (int i = 0; i < n; i++) b[i] = -1;
      while (x != n) {
        if (b[j] == -1) {
          b[j] = a[x++];
        } else if (b[j] == 0) {
          break;
        } else {
          b[j]--;
          b[j] = min(b[j], a[x++]);
        }
        j++;
        if (j == i) j = 0;
      }
      if (x == n) {
        cout << i;
        break;
      }
    }
  }
  return 0;
}
