NUMBERS = None
TARGET = 0

def dfs(n, ret):
    if n == len(NUMBERS):
        return ret == TARGET
    
    return dfs(n+1, ret+NUMBERS[n]) + dfs(n+1, ret-NUMBERS[n])

def solution(numbers, target):
    global NUMBERS, TARGET
    NUMBERS, TARGET = numbers, target
    
    return dfs(0, 0)

from itertools import product

def solution(numbers, target):
    pairs = ((-x, x) for x in numbers)
    return sum(sum(nums) == target for nums in product(*pairs))

print(solution([1, 1, 1, 1, 1], 3))