···11+import fileinput
22+33+44+PATTERN = [0, 1, 0, -1]
55+SIGNAL = [int(s) for s in fileinput.input()[0].strip()]
66+77+88+def fft(signal):
99+ def coeff(idx, digit):
1010+ r = ((idx + 1) // (digit + 1)) % 4
1111+ return PATTERN[r]
1212+1313+ for _ in range(100):
1414+ for i in range(len(signal)):
1515+ res = 0
1616+ for j, d in enumerate(signal):
1717+ res += coeff(j, i) * d
1818+1919+ signal[i] = abs(res) % 10
2020+2121+ return signal
2222+2323+2424+def fft_backhalf(signal):
2525+ # What pattern?
2626+ for _ in range(100):
2727+ partial = 0
2828+ for i in reversed(range(len(signal) // 2, len(signal))):
2929+ partial += signal[i]
3030+ signal[i] = partial % 10
3131+3232+ return signal
3333+3434+3535+part_1 = ''.join(str(n) for n in fft(SIGNAL[:]))[:8]
3636+print "First 8 digits of FFT(input):", part_1
3737+3838+offset = int(''.join(str(n) for n in SIGNAL[:7]))
3939+part_2 = ''.join(str(n) for n in fft_backhalf(SIGNAL * 10000)[offset:offset+8])
4040+print "Offset digits of FFT(input * 10000):", part_2