/* (PARI) R. J. Cano, Apr 23 2018 */

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=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=[];
    for(k=1,#ini-1,r=concat(r,Digits(Seq[i-k-1],B)));
    r=Set(r);
    for(k=1,#r,flag1[r[k]+1]=2);
    r=Set(Digits(Seq[i-1],B));
    for(k=1,#r,flag1[r[k]+1]=0);
    for(j=1,oo,
      forvec(y=vector(j,u,[0,B-1]),
        ok=1;
        for(k=1,#y,if(!flag1[y[k]+1],ok=0;break));
        if(ok,
          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);
}

vecA303294(n)=firstTerms(n,[0,1,2],10);