#include const int Q=200007; int n,q; char v[Q]; int str[Q][20]; bool viz[Q]; int lst[Q],val[2*Q],nxt[2*Q],nr; int nrc[Q][26]; int a[26]; int h[Q]; int nrnod; int lca(int a, int b) { int aux; if(h[a]>h[b]) { aux=a; a=b; b=aux; } // b mai jos de a int d=h[b]-h[a]; int p=0; while(d) { if(d&1) b=str[b][p]; p++; d/=2; } if(a==b) return a; for(int k=18; k>=0; k--) { if(str[a][k]!=str[b][k]) { a=str[a][k]; b=str[b][k]; } } return str[a][0]; } void add(int a, int b) { val[++nr]=b; nxt[nr]=lst[a]; lst[a]=nr; } void adauga(int who, int tat, char f) { for(int i=0; i<26; i++) nrc[who][i]=nrc[tat][i]; nrc[who][f-'a']++; str[who][0]=tat; int act=tat; for(int k=1; (1<