def partial_sum(seq, start, dir): start, stop = (start + 1, len(seq)) if dir > 0 else (0, start) return sum(seq[i] for i in xrange(start, stop)) def find_saws(k, n): if n < 1: return 0 elif n == 1: return k else: return 2 * sum(reduce(lambda m, v: [partial_sum(m, i, ((v+1)%2)*2-1) for i, _ in enumerate(m)], range(n-2), range(k)))