def visual_tern(n):
dat=tern_powers(n)
exp=1/2
w=2*abs(n)^exp
pic=Graphics()
nb=0
pb=0
nbase=[]
pbase=[]
for k in reversed(range(len(dat[0]))):
if dat[1][k]>0:
pbase=pbase+[dat[0][k]]
s=dat[0][k]^exp.n()
pic+=polygon([(w-s,pb),(w+s,pb),(w+s,pb+s),(w-s,pb+s)])
pic+=text(str(dat[0][k]),(w,pb+s/2),color='yellow')
pb+=s
elif dat[1][k]<0:
nbase=nbase+[dat[0][k]]
s=dat[0][k]^exp.n()
pic+=polygon([(-w+s,nb),(-w-s,nb),(-w-s,nb+s),(-w+s,nb+s)])
pic+=text(str(dat[0][k]),(-w,nb+s/2),color='yellow')
nb+=s
if n>0:
s=n^exp
pic+=polygon([(-w+s,nb),(-w-s,nb),(-w-s,nb+s),(-w+s,nb+s)],color='black')
pic+=text(str(n),(-w,nb+s/2),color='red')
else:
s=(-n)^exp
pic+=polygon([(w+s,pb),(w-s,pb),(w-s,pb+s),(w+s,pb+s)],color='black')
pic+=text(str(n),(w,pb+s/2),color='red')
pic+=line([(-2*w,0),(2*w,0)],color='black')
pic+=polygon([(0,0),(w/4,-w/4),(-w/4,-w/4)],color='red')
pic+=text(str(n)+" = sum("+str(pbase)+")-sum("+str(nbase)+")",(0,-(abs(n)^exp)))
pic.show(axes=False)