桁の0
からはじまる、ビットのグレイコードを生成し、順にとのxor(排他的論理和)を取ればよいです。
グレイコードはビット演算や再帰で生成可能です。
xxxxxxxxxx
n = int(input())
s = input()
#Gray code(recursive)
def Gray_code(n):
dp = [[] for _ in range(n+1)]
dp[0].append('')
for i in range(1,n+1):
for t in dp[i-1]:
dp[i].append('0' + t)
for t in dp[i-1][::-1]:
dp[i].append('1' + t)
return dp[n]
g = Gray_code(n)
a = [bin(int(v,2) ^ int(s,2))[2:].zfill(n) for v in g]
for v in a:
print(v)