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 LuaJIT (2.0.4) (judge verdict: Accepted)

local mmi, mma, mab, mfl = math.min, math.max, math.abs, math.floor
local function solve()
  local n = io.read("*n")
  local iszero = false
  local cnt = {}
  for i = 1, 12 do cnt[i] = 0 end
  for i = 1, n do
    local d = io.read("*n")
    if d == 0 then iszero = true
    else
      cnt[d] = cnt[d] + 1
      if 3 <= cnt[d] then iszero = true end
    end
  end
  if iszero then return 0 end
  local fix, float = {}, {}
  local minval = 12
  for i = 12, 1, -1 do
    if 0 < cnt[i] then
      minval = i
    end
    if cnt[i] == 1 then
      table.insert(float, i)
    elseif cnt[i] == 2 then
      table.insert(fix, i)
    end
  end
  --fix_fix
  for i = 1, #fix - 1 do
    for j = i + 1, #fix do
      minval = mmi(minval, fix[i] - fix[j])
    end
  end
  for i = 1, #fix do
    minval = mmi(minval, fix[i] * 2)
    minval = mmi(minval, (12 - fix[i]) * 2)
  end
  --fix_float
  for i = 1, #fix do
    for j = 1, #float do
      minval = mmi(minval, mab(fix[i] - float[j]))
    end
  end
  --float_float
  if 0 < #float then
    local mul = 1
    local z = {}
    for i = 1, #float do mul = mul * 2 end
    local partmax = 0
    for i = 0, mul - 1 do
      local partmin = 12
      for j = 1, #float do
        if i % 2 == 0 then
          z[j] = float[j]
        else
          z[j] = -float[j]
        end
        i = mfl(i / 2)
      end
      for j = 1, #float - 1 do
        for k = j + 1, #float do
          local v = mab(z[j] - z[k])
          v = mmi(v, 24 - v)
          partmin = mmi(partmin, v)
        end
      end
      partmax = mma(partmax, partmin)
    end
    minval = mmi(minval, partmax)
  end
  return minval
end
print(solve())