------
## 最终结论
```python
from math import factorial
from functools import lru_cache

def get_probability(balls):
    total_balls = sum(balls)
    n = total_balls // 2

    @lru_cache(None)
    def comb(n, k):
        if k > n:
            return 0
        return factorial(n) // (factorial(k) * factorial(n - k))

    @lru_cache(None)
    def dfs(index, box1_count, box2_count, distinct1, distinct2):
        if index == len(balls):
            if box1_count == box2_count == n and distinct1 == distinct2:
                return 1
            return 0

        total_ways = 0
        for i in range(balls[index] + 1):
            j = balls[index] - i
            new_distinct1 = distinct1 + (i > 0)
            new_distinct2 = distinct2 + (j > 0)
            total_ways += dfs(index + 1, box1_count + i, box2_count + j,
                              new_distinct1, new_distinct2) * comb(balls[index], i)

        return total_ways

    valid_ways = dfs(0, 0, 0, 0, 0)
    total_ways = comb(total_balls, n)

    return valid_ways / total_ways

# Example usage:
balls_list = [
    [1, 1],
    [2, 1, 1],
    [1, 2, 1, 2],
    [3, 2, 1],
    [6, 6, 6, 6, 6, 6]
]

for balls in balls_list:
    print(f"Input: {balls} -> Output: {get_probability(tuple(balls)):.5f}")
```