g = List(1); \\ generator stack genpow(p) = my(a=g[1]++);listput(g,[0,p]);()->g[a][1]++^g[a][2]; genpowf(p,f) = my(a=g[1]++);listput(g,[0,p]);(s=0)->my(q);while(ispower(p=g[a][1]++^g[a][2],f)||(s&&q++<=s),);p;