import sys
#Time for gschem unit in ns
XU = 10.0
#Voltage for unit for ch 1 and 2 in mV
YU1 = 1.0
YU2 = 10.0
#Resistors 2 and 3 resistances in ohms
R2 = 983.0
R3 = 99.4
#Frequency in Hz
F = 30303.0
def getlist(list, x0, y0, invert):
for i in range(len(list)):
list[ i ][0] -= x0
list[ i ][2] -= x0
if (invert):
list[ i ][1] = y0 - list[ i ][1]
list[ i ][3] = y0 - list[ i ][3]
else:
list[ i ][1] -= y0
list[ i ][3] -= y0
return list
def gety(list, i, t):
lx = float(list[ i ][2] - list[ i ][0])
ly = float(list[ i ][3] - list[ i ][1])
dx = float(t - list[ i ][0])
dy = ly * abs(dx / lx)
return list[ i ][1] + dy
def output(s, e):
#Energy in uJ
e *= XU / 10 / 1000000
print("%s power was %.3f uW" % (s, F * e))
lines = []
for s in sys.stdin:
l = []
i1 = -1
if (s[0] != "L"): continue
for j in range(5):
if (i1 == len(s)): break
i0 = i1 + 1
i1 = i0 + s[i0:].find(" ")
if (s[i0:].find(" ") == -1): i1 = len(s)
if (j and s[i0:i1].isdigit()): l.append(int(s[i0:i1]))
lines.append(l)
x0 = lines[0][0]
y0 = lines[-2][1]
lines.pop()
lines.pop()
i1 = map(lambda l: l[1] <= y0, lines).index(True)
i2 = map(lambda l: l[0] == x0, lines[1 : ]).index(True) + 1
ilist = getlist(lines[: i1], x0, y0, False)
olist = getlist(lines[i1 : i2], lines[i1][0], y0, True)
ch2list = getlist(lines[i2 : ], lines[i2][0], lines[-1][3], False)
e = 0.0
i1 = i2 = 0
for t in range(0, ilist[-1][2], 10):
if (t >= ilist[i1][2]): i1 += 1;
if (t >= ch2list[i2][2]): i2 += 1;
ilr = gety(ch2list, i2, t) * YU2 / R2
vlr = gety(ilist, i1, t) * YU1
plr = ilr * vlr / 1000
pr = vlr * vlr / R3 / 1000
pl = plr - pr
e += pl
output("Input", e)
e = 0.0
i1 = 0
for t in range(0, olist[-1][2], 10):
if (t >= olist[i1][2]): i1 += 1;
vlr = gety(olist, i1, t) * YU1
pr = vlr * vlr / R3 / 1000
e += pr
output("Output", e)
aW1wb3J0IHN5cwoKI1RpbWUgZm9yIGdzY2hlbSB1bml0IGluIG5zClhVID0gMTAuMAojVm9sdGFnZSBmb3IgdW5pdCBmb3IgY2ggMSBhbmQgMiBpbiBtVgpZVTEgPSAxLjAKWVUyID0gMTAuMAojUmVzaXN0b3JzIDIgYW5kIDMgcmVzaXN0YW5jZXMgaW4gb2htcwpSMiA9IDk4My4wClIzID0gOTkuNAojRnJlcXVlbmN5IGluIEh6CkYgPSAzMDMwMy4wCgpkZWYgZ2V0bGlzdChsaXN0LCB4MCwgeTAsIGludmVydCk6CiAgICBmb3IgaSBpbiByYW5nZShsZW4obGlzdCkpOgogICAgICAgIGxpc3RbIGkgXVswXSAtPSB4MAogICAgICAgIGxpc3RbIGkgXVsyXSAtPSB4MAogICAgICAgIGlmIChpbnZlcnQpOgogICAgICAgICAgICBsaXN0WyBpIF1bMV0gPSB5MCAtIGxpc3RbIGkgXVsxXQogICAgICAgICAgICBsaXN0WyBpIF1bM10gPSB5MCAtIGxpc3RbIGkgXVszXQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIGxpc3RbIGkgXVsxXSAtPSB5MAogICAgICAgICAgICBsaXN0WyBpIF1bM10gLT0geTAKICAgIHJldHVybiBsaXN0CgpkZWYgZ2V0eShsaXN0LCBpLCB0KToKICAgIGx4ID0gZmxvYXQobGlzdFsgaSBdWzJdIC0gbGlzdFsgaSBdWzBdKQogICAgbHkgPSBmbG9hdChsaXN0WyBpIF1bM10gLSBsaXN0WyBpIF1bMV0pCiAgICBkeCA9IGZsb2F0KHQgLSBsaXN0WyBpIF1bMF0pCiAgICBkeSA9IGx5ICogYWJzKGR4IC8gbHgpCiAgICByZXR1cm4gbGlzdFsgaSBdWzFdICsgZHkKCmRlZiBvdXRwdXQocywgZSk6CiAgICAjRW5lcmd5IGluIHVKCiAgICBlICo9IFhVIC8gMTAgLyAxMDAwMDAwCiAgICBwcmludCgiJXMgcG93ZXIgd2FzICUuM2YgdVciICUgKHMsIEYgKiBlKSkKCmxpbmVzID0gW10KZm9yIHMgaW4gc3lzLnN0ZGluOgogICAgbCA9IFtdCiAgICBpMSA9IC0xCiAgICBpZiAoc1swXSAhPSAiTCIpOiBjb250aW51ZQogICAgZm9yIGogaW4gcmFuZ2UoNSk6CiAgICAgICBpZiAoaTEgPT0gbGVuKHMpKTogYnJlYWsKICAgICAgIGkwID0gaTEgKyAxCiAgICAgICBpMSA9IGkwICsgc1tpMDpdLmZpbmQoIiAiKQogICAgICAgaWYgKHNbaTA6XS5maW5kKCIgIikgPT0gLTEpOiBpMSA9IGxlbihzKQogICAgICAgaWYgKGogYW5kIHNbaTA6aTFdLmlzZGlnaXQoKSk6IGwuYXBwZW5kKGludChzW2kwOmkxXSkpCiAgICBsaW5lcy5hcHBlbmQobCkKCngwID0gbGluZXNbMF1bMF0KeTAgPSBsaW5lc1stMl1bMV0KbGluZXMucG9wKCkKbGluZXMucG9wKCkKaTEgPSBtYXAobGFtYmRhIGw6IGxbMV0gPD0geTAsIGxpbmVzKS5pbmRleChUcnVlKQppMiA9IG1hcChsYW1iZGEgbDogbFswXSA9PSB4MCwgbGluZXNbMSA6IF0pLmluZGV4KFRydWUpICsgMQppbGlzdCA9IGdldGxpc3QobGluZXNbOiBpMV0sIHgwLCB5MCwgRmFsc2UpCm9saXN0ID0gZ2V0bGlzdChsaW5lc1tpMSA6IGkyXSwgbGluZXNbaTFdWzBdLCB5MCwgVHJ1ZSkKY2gybGlzdCA9IGdldGxpc3QobGluZXNbaTIgOiBdLCBsaW5lc1tpMl1bMF0sIGxpbmVzWy0xXVszXSwgRmFsc2UpCgplID0gMC4wCmkxID0gaTIgPSAwCmZvciB0IGluIHJhbmdlKDAsIGlsaXN0Wy0xXVsyXSwgMTApOgogICAgaWYgKHQgPj0gaWxpc3RbaTFdWzJdKTogaTEgKz0gMTsKICAgIGlmICh0ID49IGNoMmxpc3RbaTJdWzJdKTogaTIgKz0gMTsKICAgIGlsciA9IGdldHkoY2gybGlzdCwgaTIsIHQpICogWVUyIC8gUjIKICAgIHZsciA9IGdldHkoaWxpc3QsIGkxLCB0KSAqIFlVMQogICAgcGxyID0gaWxyICogdmxyIC8gMTAwMAogICAgcHIgPSB2bHIgKiB2bHIgLyBSMyAvIDEwMDAKICAgIHBsID0gcGxyIC0gcHIKICAgIGUgKz0gcGwKb3V0cHV0KCJJbnB1dCIsIGUpCgplID0gMC4wCmkxID0gMApmb3IgdCBpbiByYW5nZSgwLCBvbGlzdFstMV1bMl0sIDEwKToKICAgIGlmICh0ID49IG9saXN0W2kxXVsyXSk6IGkxICs9IDE7CiAgICB2bHIgPSBnZXR5KG9saXN0LCBpMSwgdCkgKiBZVTEKICAgIHByID0gdmxyICogdmxyIC8gUjMgLyAxMDAwCiAgICBlICs9IHByCm91dHB1dCgiT3V0cHV0IiwgZSkK