#include <bits/stdc++.h>
using namespace std;
struct Grid {
  long long x, y, t;
};
struct Edge {
  long long to, cost;
};
struct Graph {
  vector<vector<Edge>> E;
  int V;
  const long long Inf = 1e18;
  const int MAX_V = 201010;
  vector<long long> d;
  Graph(int n) : E(n) {
    d.resize(MAX_V);
    E.resize(n);
    V = n;
  }
  void init() {
    for (int i = 0; i < MAX_V; i++) d[i] = Inf;
  }
  void add_edge(long long from, long long to, long long cost) {
    E[from].push_back({to, cost});
  }
};
int n;
int dep;
int ans = 0;
set<int> se;
void dfs(int bit, int d) {
  if (dep == d) {
    vector<int> ho;
    int cnt = 0;
    for (int num : se) {
      if (bit & (1 << cnt)) {
        ho.push_back((24 - num) % 24);
      } else {
        ho.push_back(num);
      }
      cnt++;
    }
    int mi = 1e9;
    for (int i = 0; i < dep; i++)
      for (int j = i + 1; j < dep; j++) mi = min(mi, abs(ho[i] - ho[j]));
    ans = max(ans, mi);
  }
  dfs(bit + 1 << d, d + 1);
  dfs(bit, d + 1);
}
int main() {
  cin.tie(0);
  ios::sync_with_stdio(false);
  cin >> n;
  se.insert(0);
  for (int i = 1; i <= n; i++) {
    int a;
    cin >> a;
    se.insert(a);
  }
  dep = se.size();
  dfs(0, 0);
  cout << ans << endl;
  return 0;
}
