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 JavaScript (Node.js 12.16.1) (judge verdict: Accepted)

console.log((args=>{
  const [[N],D] = args.trim().split('\n').map( r=>r.split(' ').map(v=>v|0));
  if ( N === 1 ) return `${D[0]}`;
  const q = Array(13).fill(0);
  let _s = 12, s = 1;
  for ( let i = 0; i < N; i++ ) {
    if ( ++q[D[i]] > 2 ) return '0';
    if ( D[i] < _s ) _s = D[i];
    if ( q[D[i]] === 2 ) _s = Math.min(_s,24-2*D[i]);
  }
  if ( q[12] > 1 || q[0] > 0 ) return '0';
  const mask = q.reduce((a,b,i)=>a|(b===1?0:1<<i),1);
  for ( let m = 0; m < 1<<13; m = m+1|mask ) {
    let min = _s;
    for ( let a = 1; a <= 12; a++ ) {
      if ( !q[a] ) continue;
      for ( let b = a+1; b <= 12; b++ ) {
        if ( !q[b] ) continue;
        let t = b - a;
        if ( q[a]===1 && q[b] === 1 ) t = (m>>a&1^m>>b&1)?24-a-b:t;
        min = Math.min( min, t );
      }
    }
    if ( s < min ) s = min;
  }
  return `${s}`;
})(require('fs').readFileSync('/dev/stdin', 'utf8')));