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 <iostream>
#include <vector>
#include <string>
#include <sstream>
#include <utility>
#include <set>
#include <map>
#include <queue>
#include <stack>
#include <algorithm>
#include <istream>
#include <ostream>

#include <cstdlib>
#include <cmath>
#include <cstdio>

using namespace std;

#define fi first
#define se second
#define mkp make_pair
#define all(x) (x).begin(), (x).end()
#define pb push_back
#define rep(i,n) for(ll i=0; i < (n); ++i)
#define rrep(i,n) for(ll i=((n)-1); i >= 0; --i)

#define OPLT(T) bool operator<(const T & lop_, const T & rop_)
#define OPEQ(T) bool operator==(const T & lop_, const T & rop_)

typedef long long ll;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;

int main() {
	int N;
	cin >> N;
	vector<int> D(N);
	rep(i,N) cin >> D[i];

	int cnt[20] = {1};
	int res = -1;
	rep(i,N) {
		cnt[D[i]]++;
		if( ((D[i]==0||D[i]==12)&&cnt[D[i]]>=2) || cnt[D[i]] >= 3) {
			res = 0;
		}
	}
	if(res) {
		for(int i = 0; i < (1<<11); i++) {
			vector<int> t;
			if(cnt[0]) t.push_back(0);
			if(cnt[12]) t.push_back(12);

			for(int j = 0; j < 11; j++) {
				if(cnt[j+1] == 2) {
					t.push_back(j+1);
					t.push_back(24-(j+1));
				}
				else if(cnt[j+1] == 1) {
					if(i&(1<<j))
						t.push_back(j+1);
					else
						t.push_back(24-(j+1));
				}
			}
			sort(all(t));
			t.push_back(0);
			int mn = 24;
			for(int j = 1; j < t.size(); j++) {
				mn = min(mn, abs(t[j]-t[j-1]));
			}
			res = max(res, mn);
		}
	}
	cout << res << endl;
	return 0;
}