Problem:
Score : 500 points

Problem Statement

In CODE FESTIVAL XXXX, there are N+1 participants from all over the world, including Takahashi.

Takahashi checked and found that the time gap (defined below) between the local times in his city and the i-th person's city was D_i hours.
The time gap between two cities is defined as follows. For two cities A and B, if the local time in city B is d o'clock at the moment when the local time in city A is 0 o'clock, then the time gap between these two cities is defined to be min(d,24-d) hours.
Here, we are using 24-hour notation.
That is, the local time in the i-th person's city is either d o'clock or 24-d o'clock at the moment when the local time in Takahashi's city is 0 o'clock, for example.

Then, for each pair of two people chosen from the N+1 people, he wrote out the time gap between their cities. Let the smallest time gap among them be s hours.

Find the maximum possible value of s.

Constraints

1 \leq N \leq 50

0 \leq D_i \leq 12

All input values are integers.

Input

Input is given from Standard Input in the following format:

N
D_1 D_2 ... D_N

Output

Print the maximum possible value of s.

Sample Input 1

3
7 12 8

Sample Output 1

4

For example, consider the situation where it is 7, 12 and 16 o'clock in each person's city at the moment when it is 0 o'clock in Takahashi's city. In this case, the time gap between the second and third persons' cities is 4 hours.

Sample Input 2

2
11 11

Sample Output 2

2

Sample Input 3

1
0

Sample Output 3

0

Note that Takahashi himself is also a participant.

Solution in C++14 (GCC 5.4.1) (judge verdict: Wrong Answer)

#include <algorithm>
#include <iostream>
#include <iomanip>
#include <cassert>
#include <cstring>
#include <string>
#include <vector>
#include <random>
#include <bitset>
#include <queue>
#include <cmath>
#include <unordered_map>
#include <set>
#include <stack>
#include <map>
#define INCANT cin.tie(0), cout.tie(0), ios::sync_with_stdio(0), cout << fixed << setprecision(20);
#define rep(i,n) for (int i=0; i<n;++i)
#define ALL(a)  (a).begin(),(a).end()
#define PI 3.14159265358979
typedef long long ll;
using namespace std;
const ll MOD = 1e9+7LL;
const int INF = 2e9;
int N;
int a[51];
int c[13];
vector<int> V;

int calc_MIN(int b){ // 0 <=  b < 1<<24
  int MIN=12;
  int prev = -1;
  bool flag = false;
  rep(i, 25)  {
    if (i==0) continue;
    int mask = 1<<i;
    if (b & mask) {
      if (!flag) MIN = i;
      else MIN = min(MIN, i-prev);
      prev = i;
      flag = true;
    }
  }
  return MIN;
}

void create_vec(int idx, stack<int> st) {
  if (idx==14) {
    int d=0;
    while(!st.empty()) {
      int q = st.top();st.pop();
      d+=(1<<q);
    }
    d+=1<<24;
    V.push_back(d);
    return;
  }
  if (c[idx]==1) {
    st.push(idx);
    create_vec(idx+1, st);
    st.pop();
    if (idx > 0 && idx < 12) {
      st.push(24-idx);
      create_vec(idx+1, st);
    }
  } else if(c[idx]>1) { // 同じものに関しては最終的に0になり、候補外 
    st.push(idx);
    st.push(24-idx);
    create_vec(idx+1, st);
  }
  else create_vec(idx+1, st);
}

int main() {
  INCANT;
  cin >> N;
  int d;
  rep(i, N) {
    cin >> d;
    c[min(24-d, d)]++;
  }
  c[0]++; // 高橋
  if (c[0]>1 || c[12]>1) {
    cout << 0 << endl;
    return 0;
  }
  stack<int> st;
  create_vec(0, st);
  int MAX=0;
  rep(i, V.size()) MAX  = max(MAX, calc_MIN(V[i]));
  cout << MAX << endl;
  
  return 0;
}