def insertion_binary(data):
for i in range(len(data)):
key = data[i]
lo, hi = 0, i - 1
while lo < hi:
mid = lo + (hi - lo) // 2
if key < data[mid]:
hi = mid
else:
lo = mid + 1
for j in range(i, lo + 1, -1):
data[j] = data[j - 1]
data[lo] = key
return data
ZGVmIGluc2VydGlvbl9iaW5hcnkoZGF0YSk6Cglmb3IgaSBpbiByYW5nZShsZW4oZGF0YSkpOgoJCWtleSA9IGRhdGFbaV0KCQlsbywgaGkgPSAwLCBpIC0gMQoJCXdoaWxlIGxvIDwgaGk6CgkJCW1pZCA9IGxvICsgKGhpIC0gbG8pIC8vIDIKCQkJaWYga2V5IDwgZGF0YVttaWRdOgoJCQkJaGkgPSBtaWQKCQkJZWxzZToKCQkJCWxvID0gbWlkICsgMQoJCWZvciBqIGluIHJhbmdlKGksIGxvICsgMSwgLTEpOgoJCQlkYXRhW2pdID0gZGF0YVtqIC0gMV0KCQlkYXRhW2xvXSA9IGtleQoJcmV0dXJuIGRhdGE=