[n = # of non-cube squares found; we stop when it hits 30]sz [b = # found that are both squares and cubes]sz 0 d sn sb [c = current cube, s = current square, r = current cube root, q = current square root, f = "first" flag, to control comma delimiting]sz 1 d sc d ss d sq d sr sf [M = main loop]sz [ lq d * d ss [square q into s]sz lc r >I [if s > c then call Increment]sz lc ls M [loop if n is still < 30]sz ]sM [I = Increment. Bump r and c=r^3 until c >= s]sz [ lr 1 + d sr d d * * d sc ls >I ]sI [C = Comma. Print a comma and a space]sz [ 44P 32P ]sC [F = Found. Print s and increment n]sz [ ln 1 + sn lf 0 =C 0 sf [print ", " if f is not set; clear f]sz ls n ]sF [R = Remember. Save s in array l for later.]sz [ lb d ls r :l 1 + sb ]sR [B = print Both. Print out the values saved in array l.]sz [ lf 0 =C 0 sf [print ", " if f is not set; clear f]sz li d ;l n 1 + d si lb r