#include <bits/stdc++.h>
using namespace std;
template <typename T>
bool setmin(T& a, T b) {
  if (b < a) {
    a = b;
    return true;
  } else {
    return false;
  }
}
template <typename T>
bool setmax(T& a, T b) {
  if (b > a) {
    a = b;
    return true;
  } else {
    return false;
  }
}
template <typename T>
bool setmineq(T& a, T b) {
  if (b <= a) {
    a = b;
    return true;
  } else {
    return false;
  }
}
template <typename T>
bool setmaxeq(T& a, T b) {
  if (b >= a) {
    a = b;
    return true;
  } else {
    return false;
  }
}
template <typename T>
T gcd(T a, T b) {
  return (b == 0 ? a : gcd(b, a % b));
}
template <typename T>
T lcm(T a, T b) {
  return a / gcd(a, b) * b;
}
int n, d[50], b[13];
int main() {
  cin >> n;
  for (int i = (0); i < (n); i++) {
    cin >> d[i];
  }
  b[0]++;
  for (int i = (0); i < (n); i++) {
    b[d[i]]++;
  }
  int ans = 0;
  for (int i = (0); i < (1 << 13); i++) {
    vector<int> v;
    for (int j = (0); j < (13); j++) {
      if (b[j] >= 3) {
        v.push_back(0);
        v.push_back(0);
      }
      if (b[j] == 2) {
        v.push_back(j);
        v.push_back((24 - j) % 24);
      }
      if (b[j] == 1) {
        v.push_back(((i >> j) & 1) ? j : (24 - j) % 24);
      }
    }
    sort(v.begin(), v.end());
    int mi = 100;
    for (int j = (0); j < (v.size() - 1); j++) {
      setmin(mi, v[j + 1] - v[j]);
    }
    setmax(ans, mi);
  }
  cout << ans << endl;
  return 0;
}
