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);