Buggy python submission (verdict: Time Limit Exceeded):
def search(n):
    res = 0
    while n:
        n %= bin(n).count("1")
        res += 1
    return res


def main():
    n = int(input())
    x = list(input())
    x_decimal = int("".join(map(str, x)), 2)
    first_mod = sum(map(int, list(x)))
    increase_mod = first_mod + 1
    increase_base = x_decimal % increase_mod  # 反転させる桁が元々0だった場合
    decrease_mod = first_mod - 1
    if decrease_mod:
        decrease_base = x_decimal % decrease_mod  # 反転させる桁が元々1だった場合
    diff = pow(2, n - 1)
    for i in range(n):
        cnt = 0
        if x[i] == "1" and decrease_mod:
            cnt = 1 + search((decrease_base - diff % decrease_mod) % decrease_mod)
        elif x[i] == "0":
            cnt = 1 + search((increase_base + diff % increase_mod) % increase_mod)
        diff //= 2
        print(cnt)


if __name__ == '__main__':
    main()



Fixed submission:
def search(n):
    res = 0
    while n:
        n %= bin(n).count("1")
        res += 1
    return res


def main():
    n = int(input())
    x = list(input())
    x_decimal = int("".join(map(str, x)), 2)
    first_mod = sum(map(int, list(x)))
    increase_mod = first_mod + 1
    increase_base = x_decimal % increase_mod  # 反転させる桁が元々0だった場合
    decrease_mod = first_mod - 1
    if decrease_mod:
        decrease_base = x_decimal % decrease_mod  # 反転させる桁が元々1だった場合
    for i in range(n):
        cnt = 0
        if x[i] == "1" and decrease_mod:
            cnt = 1 + search((decrease_base - pow(2, n - i - 1, decrease_mod)) % decrease_mod)
        elif x[i] == "0":
            cnt = 1 + search((increase_base + pow(2, n - i - 1, increase_mod)) % increase_mod)
        print(cnt)


if __name__ == '__main__':
    main()

Buggy python submission (verdict: Time Limit Exceeded):
def search(n):
    res = 0
    while n:
        n %= bin(n).count("1")
        res += 1
    return res


def main():
    n = int(input())
    x = list(map(int, list(input())))
    first_mod = x_decimal = 0
    diff = pow(2, n - 1)
    for i in range(n):
        if x[i]:
            first_mod += 1
            x_decimal += diff
        diff //= 2
    increase_base = x_decimal % (first_mod + 1)  # 反転させる桁が元々0だった場合
    if first_mod > 1:
        decrease_base = x_decimal % (first_mod - 1)  # 反転させる桁が元々1だった場合
    diff = pow(2, n - 1)
    for i in range(n):
        cnt = 0
        if x[i] == 1 and first_mod > 1:
            cnt = 1 + search((decrease_base - diff % (first_mod - 1)) % (first_mod - 1))
        elif x[i] == 0:
            cnt = 1 + search((increase_base + diff % (first_mod + 1)) % (first_mod + 1))
        diff //= 2
        print(cnt)


if __name__ == '__main__':
    main()



Fixed submission:
def search(n):
    res = 0
    while n:
        n %= bin(n).count("1")
        res += 1
    return res


def main():
    n = int(input())
    x = list(input())
    x_decimal = int("".join(map(str, x)), 2)
    first_mod = sum(map(int, list(x)))
    increase_mod = first_mod + 1
    increase_base = x_decimal % increase_mod  # 反転させる桁が元々0だった場合
    decrease_mod = first_mod - 1
    if decrease_mod:
        decrease_base = x_decimal % decrease_mod  # 反転させる桁が元々1だった場合
    for i in range(n):
        cnt = 0
        if x[i] == "1" and decrease_mod:
            cnt = 1 + search((decrease_base - pow(2, n - i - 1, decrease_mod)) % decrease_mod)
        elif x[i] == "0":
            cnt = 1 + search((increase_base + pow(2, n - i - 1, increase_mod)) % increase_mod)
        print(cnt)


if __name__ == '__main__':
    main()

Buggy python submission (verdict: Runtime Error):
def search(n):
    res = 0
    while n:
        n %= bin(n).count("1")
        res += 1
    return res


def main():
    n = int(input())
    x = list(map(int, list(input())))
    first_mod = x_decimal = 0
    diff = pow(2, n - 1)
    for i in range(n):
        if x[i]:
            first_mod += 1
            x_decimal += diff
        diff //= 2
    increase_base = x_decimal % (first_mod + 1)  # 反転させる桁が元々0だった場合
    decrease_base = x_decimal % (first_mod - 1)  # 反転させる桁が元々1だった場合
    diff = pow(2, n - 1)
    for i in range(n):
        cnt = 0
        if x[i] == 1 and first_mod > 1:
            cnt = 1 + search((decrease_base - diff % (first_mod - 1)) % (first_mod - 1))
        elif x[i] == 0:
            cnt = 1 + search((increase_base + diff % (first_mod + 1)) % (first_mod + 1))
        diff //= 2
        print(cnt)


if __name__ == '__main__':
    main()



Fixed submission:
def search(n):
    res = 0
    while n:
        n %= bin(n).count("1")
        res += 1
    return res


def main():
    n = int(input())
    x = list(input())
    x_decimal = int("".join(map(str, x)), 2)
    first_mod = sum(map(int, list(x)))
    increase_mod = first_mod + 1
    increase_base = x_decimal % increase_mod  # 反転させる桁が元々0だった場合
    decrease_mod = first_mod - 1
    if decrease_mod:
        decrease_base = x_decimal % decrease_mod  # 反転させる桁が元々1だった場合
    for i in range(n):
        cnt = 0
        if x[i] == "1" and decrease_mod:
            cnt = 1 + search((decrease_base - pow(2, n - i - 1, decrease_mod)) % decrease_mod)
        elif x[i] == "0":
            cnt = 1 + search((increase_base + pow(2, n - i - 1, increase_mod)) % increase_mod)
        print(cnt)


if __name__ == '__main__':
    main()

Buggy python submission (verdict: Time Limit Exceeded):
def main():
    n = int(input())
    x = input()
    base = 0
    b = 1
    for i in range(n):
        base += int(x[-i - 1]) * b
        b *= 2
    for i in range(n):
        d = 1 if x[i] == "0" else -1
        now = base + d * pow(2, n - i - 1)
        cnt = 0
        while now:
            now %= int(bin(now)[2:].count("1"))
            cnt += 1
        print(cnt)


if __name__ == '__main__':
    main()



Fixed submission:
def search(n):
    res = 0
    while n:
        n %= bin(n).count("1")
        res += 1
    return res


def main():
    n = int(input())
    x = list(input())
    x_decimal = int("".join(map(str, x)), 2)
    first_mod = sum(map(int, list(x)))
    increase_mod = first_mod + 1
    increase_base = x_decimal % increase_mod  # 反転させる桁が元々0だった場合
    decrease_mod = first_mod - 1
    if decrease_mod:
        decrease_base = x_decimal % decrease_mod  # 反転させる桁が元々1だった場合
    for i in range(n):
        cnt = 0
        if x[i] == "1" and decrease_mod:
            cnt = 1 + search((decrease_base - pow(2, n - i - 1, decrease_mod)) % decrease_mod)
        elif x[i] == "0":
            cnt = 1 + search((increase_base + pow(2, n - i - 1, increase_mod)) % increase_mod)
        print(cnt)


if __name__ == '__main__':
    main()