def GCD(a, b):
prevx, x = 1, 0
prevy, y = 0, 1
while b:
q = a/b
x, prevx = prevx - q*x, x
y, prevy = prevy - q*y, y
a, b = b, a%b
return a, prevx, prevy
def modinv(x, m):
(gcd, c, d)= GCD(x,m)
if c<0:
c += m
return c
q = 2**256 - 432420386565659656852420866394968145599
r = 0xd47ce4c025c35ec440bc81d99834a624875161a26bf56ef7fdc0f5d52f843ad1
s1 = 0x44e1ff2dfd8102cf7a47c21d5c9fd5701610d04953c6836596b4fe9dd2f53e3e
s2 = 0x9a5f1c75e461d7ceb1cf3cab9013eb2dc85b6d0da8c3c6e27e3a5a5b3faa5bab
m1 = 0xc0e2d0a89a348de88fda08211c70d1d7e52ccef2eb9459911bf977d587784c6e
m2 = 0x17b0f41c8c337ac1e18c98759e83a8cccbc368dd9d89e5f03cb633c265fd0ddc
print "%x" % (m1-m2) # -c92fa3379640006d2eae6af7760f4180d0cf13d3f49da60c183e0ba07a1caffe
print "%x" % (s1-s2) # db4297e4f61d4c83ecaa00574d8cce2f9a531f164d28166ee484c58e92628104
mi = modinv(s1-s2, q)
print "%x" % mi # 7369938cee97daa2c7e2b9aab4c07d7ba1189e177499caf6a2de68a71427428f
k = ((m1-m2)*mi) % q
print "k = %x" % k # 6e3469cb1dec3ce994dfc5c88bb53971fe513749727bdfa4a44a38f294008136
rinv = modinv(r, q)
xx = (s1*k-m1) % q
print "xx=%x" % xx # 8321bc4f5e0a2973e5bdc9ba8194cc62c5be375216832cb5c04c28cab035dd42
x = (xx * rinv) % q
print "x=%x" % x # 1930a0cb6fe514b9ab03c652a61ac53b2c7ee6db417543de782503e690fab966
CmRlZiBHQ0QoYSwgYik6CiAgICBwcmV2eCwgeCA9IDEsIDAKICAgIHByZXZ5LCB5ID0gMCwgMQogICAgd2hpbGUgYjoKICAgICAgICBxID0gYS9iCiAgICAgICAgeCwgcHJldnggPSBwcmV2eCAtIHEqeCwgeAogICAgICAgIHksIHByZXZ5ID0gcHJldnkgLSBxKnksIHkKICAgICAgICBhLCBiID0gYiwgYSViCiAgICByZXR1cm4gYSwgcHJldngsIHByZXZ5CgoKZGVmIG1vZGludih4LCBtKToKICAgIChnY2QsIGMsIGQpPSBHQ0QoeCxtKQogICAgaWYgYzwwOgogICAgICAgIGMgKz0gbQogICAgcmV0dXJuIGMKCnEgPSAyKioyNTYgLSA0MzI0MjAzODY1NjU2NTk2NTY4NTI0MjA4NjYzOTQ5NjgxNDU1OTkKCnIgPSAweGQ0N2NlNGMwMjVjMzVlYzQ0MGJjODFkOTk4MzRhNjI0ODc1MTYxYTI2YmY1NmVmN2ZkYzBmNWQ1MmY4NDNhZDEKczEgPSAweDQ0ZTFmZjJkZmQ4MTAyY2Y3YTQ3YzIxZDVjOWZkNTcwMTYxMGQwNDk1M2M2ODM2NTk2YjRmZTlkZDJmNTNlM2UKczIgPSAweDlhNWYxYzc1ZTQ2MWQ3Y2ViMWNmM2NhYjkwMTNlYjJkYzg1YjZkMGRhOGMzYzZlMjdlM2E1YTViM2ZhYTViYWIKbTEgPSAweGMwZTJkMGE4OWEzNDhkZTg4ZmRhMDgyMTFjNzBkMWQ3ZTUyY2NlZjJlYjk0NTk5MTFiZjk3N2Q1ODc3ODRjNmUKbTIgPSAweDE3YjBmNDFjOGMzMzdhYzFlMThjOTg3NTllODNhOGNjY2JjMzY4ZGQ5ZDg5ZTVmMDNjYjYzM2MyNjVmZDBkZGMKCnByaW50ICIleCIgJSAobTEtbTIpICMgLWM5MmZhMzM3OTY0MDAwNmQyZWFlNmFmNzc2MGY0MTgwZDBjZjEzZDNmNDlkYTYwYzE4M2UwYmEwN2ExY2FmZmUKcHJpbnQgIiV4IiAlIChzMS1zMikgIyBkYjQyOTdlNGY2MWQ0YzgzZWNhYTAwNTc0ZDhjY2UyZjlhNTMxZjE2NGQyODE2NmVlNDg0YzU4ZTkyNjI4MTA0CgptaSA9IG1vZGludihzMS1zMiwgcSkKcHJpbnQgIiV4IiAlIG1pICAjIDczNjk5MzhjZWU5N2RhYTJjN2UyYjlhYWI0YzA3ZDdiYTExODllMTc3NDk5Y2FmNmEyZGU2OGE3MTQyNzQyOGYKCmsgPSAoKG0xLW0yKSptaSkgJSBxIApwcmludCAiayA9ICV4IiAlIGsgIyA2ZTM0NjljYjFkZWMzY2U5OTRkZmM1Yzg4YmI1Mzk3MWZlNTEzNzQ5NzI3YmRmYTRhNDRhMzhmMjk0MDA4MTM2CgpyaW52ID0gbW9kaW52KHIsIHEpCnh4ID0gKHMxKmstbTEpICUgcQpwcmludCAieHg9JXgiICUgeHggIyA4MzIxYmM0ZjVlMGEyOTczZTViZGM5YmE4MTk0Y2M2MmM1YmUzNzUyMTY4MzJjYjVjMDRjMjhjYWIwMzVkZDQyCnggPSAoeHggKiByaW52KSAlIHEKcHJpbnQgIng9JXgiICUgeCAjIDE5MzBhMGNiNmZlNTE0YjlhYjAzYzY1MmE2MWFjNTNiMmM3ZWU2ZGI0MTc1NDNkZTc4MjUwM2U2OTBmYWI5NjYK