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: Accepted)


#include <bits/stdc++.h>
 
#define rep(i, n) for (ll i=0;i<(n); i++)
template<class T>bool chmax(T &a, const T &b) { if (a<b) { a=b; return 1; } return 0; }
template<class T>bool chmin(T &a, const T &b) { if (b<a) { a=b; return 1; } return 0; }
#define ALL(x) (x).begin(),(x).end()
 
using namespace std;
//using ll=long long;
typedef long long ll;
typedef pair<ll, ll> pi;

ll h,w;
ll ans;
//vector<char> masu;




int main(){
  ll n;
  cin >>n;

  ll tmp, ans;
  map<ll, ll> m;

  priority_queue<ll> p;
  vector<ll> v;

  m[0]++;

  rep(i,n){
    cin>>tmp;
    m[tmp]++;
  }

  ll b=0;
  ll j;
  if(m[0]>1){
    ans = 0;
    cout << ans <<endl;
    return 0;
  }
  else {p.push(0);
    p.push(24);
  }
  if(m[12]>1){
    ans = 0;
    cout << ans <<endl;
    return 0;
  }
  else if(m[12]==1) p.push(12);

  
  rep(i, 11){
    ll j = i+1;
    if(m[j]>2){
      ans = 0;
      cout << ans <<endl;
      return 0;
    }
    else if(m[j]==2){
      p.push(j);
      p.push(24-j);
      m[j] = 0;
    }
    else if(m[j]==1){
      b++;
      v.push_back(j);
    }
  }

  //cout <<b<<endl;
  ans = 0;
  rep(i, 1<<b){
    //cout << i<<endl;
    priority_queue<ll> p_tmp = p;

    rep(j, b){
      if(i>>j&1) p_tmp.push(24-v[j]);
      else p_tmp.push(v[j]);	
    }
    
    ll min_tmp = 999999999999;
    ll tmp_p;
    
    //cout<<" "<<p_tmp.size()<<endl;
    ll N = p_tmp.size()-1;
    rep(k, N){

      tmp_p = p_tmp.top();
      p_tmp.pop();
      
      //cout <<i<<" "<< tmp_p<<" " <<p_tmp.top()<<endl;

      if(tmp_p-p_tmp.top()<min_tmp){
	min_tmp = tmp_p-p_tmp.top();
      }
    }
    ans = max(ans, min_tmp);
  }
  
  cout << ans<<endl;

  
  
}