import itertools
m = 2
def has(x):
for i in x:
for j in x:
if i + j == 0:
return True
return False
def rec(n,k):
if n == 0:
return 1
return (2 * m - 2 * k) * rec(n - 1, k + 1) + k * rec(n - 1, k)
for n in xrange(1, 10):
c = 0
for i in itertools.product([i for i in xrange(-m, 1 + m) if i], repeat=n):
if not has(i):
c += 1
print "brute force: ",n, c
print "recurrence:" ,n, rec(n,0)
aW1wb3J0IGl0ZXJ0b29scwoKbSA9IDIKCmRlZiBoYXMoeCk6CiAgZm9yIGkgaW4geDoKICAgIGZvciBqIGluIHg6CiAgICAgIGlmIGkgKyBqID09IDA6CiAgICAgICAgcmV0dXJuIFRydWUKICByZXR1cm4gRmFsc2UKCmRlZiByZWMobixrKToKICBpZiBuID09IDA6IAogICAgcmV0dXJuIDEKICByZXR1cm4gKDIgKiBtIC0gMiAqIGspICogcmVjKG4gLSAxLCBrICsgMSkgKyBrICogcmVjKG4gLSAxLCBrKQoKZm9yIG4gaW4geHJhbmdlKDEsIDEwKToKICBjID0gMAogIGZvciBpIGluIGl0ZXJ0b29scy5wcm9kdWN0KFtpIGZvciBpIGluIHhyYW5nZSgtbSwgMSArIG0pIGlmIGldLCByZXBlYXQ9bik6CiAgICBpZiBub3QgaGFzKGkpOgogICAgICBjICs9IDEKICBwcmludCAiYnJ1dGUgZm9yY2U6ICIsbiwgYwogIHByaW50ICJyZWN1cnJlbmNlOiIgLG4sIHJlYyhuLDApCgo=