Digits(x,B)=if(!x,[0],digits(x,B)); /* Due digits(0,B) returns [] for any B */ firstTerms(n,ini,B)={ /* 1<B, #ini < B and ini[k] < B for any k */ my(Seq=concat(ini,vector(n-#ini)),reset=Vecsmall(vector(B,u,1)),x,t,r,ok,flag1,flag2=Vecsmall(0,10*n)); for(k=1,#ini,flag2[ini[k]+1]=1); for(i=#ini+1,n, flag1=reset; r=Set(Digits(Seq[i-2],B)); for(k=1,#r,flag1[r[k]+1]=2); for(j=1,oo, forvec(y=vector(j,u,[0,B-1]), ok=0; if(j>1, t=1; while(!y[t]&&(t<#y),t++); for(k=t,#y,if(flag1[y[k]+1]==2,ok=1;break)) ); if(ok, x=fromdigits(y,B); ok=!flag2[x+1]; ); if(ok,Seq[i]=x;flag2[x+1]=1;break(2)) ) ) ); return(Seq); } vecA303657(n)=firstTerms(n,[0,1],10);