import java.io.PrintWriter;
import java.util.Arrays;
import java.util.HashMap;
import java.util.LinkedHashSet;
import java.util.Scanner;

public class Div656 {
	static Scanner sc =new Scanner(System.in);
	static PrintWriter out =new PrintWriter(System.out);
	
	public static void ThreePairwiseMaximums() {
		int t=sc.nextInt();
		outer:for(int o=0;o<t;o++) {
			int x=sc.nextInt();
			int y=sc.nextInt();
			int z=sc.nextInt();
			int []n= {x,y,z};
			int a=0;
			int b=0;
			int c=0;
			for(int i=0;i<3;i++) {
				for(int j=0;j<3;j++) {
					for(int k=0;k<3;k++) {
						a=n[i];
						b=n[j];
						c=n[k];
						if(x==Math.max(a,b)&&y==Math.max(a, c)&&z==Math.max(b, c)) {
							System.out.println("YES");
							System.out.println(a+" "+b+" "+c);
							continue outer;
						}
					}
				}
			}
			System.out.println("NO");
		}
	}
	
	public static void RestorethePermutationyMerger() {
		int t=sc.nextInt();
		for(int o=0;o<t;o++) {
			int n=sc.nextInt();
			LinkedHashSet<Integer>s =new LinkedHashSet<Integer>();
			for(int i=0;i<2*n;i++) {
				s.add(sc.nextInt());
			}
			for(Integer a:s) {
				System.out.print(a+" ");
			}
			System.out.println();

			
		}
	}
	
	
	public static int aGoodStringRec(String s,int l,int r,char c,int[][]ch,int[]counterCh,int temp){
		if(l==r&&s.charAt(l)==c)return 0;
		else if(l==r&&s.charAt(l)!=c)return 1;
		//int x=temp;
		//temp/=2;
		//(temp/2)-ch[(l+r)/2][c-97]
		int y=0;
		if(l>0) {
			y=ch[l-1][c-97];
			///System.out.println("y "+y+"  "+c);

		}
		int fH=(temp/2)-(ch[(l+r)/2][c-97]-y);
		int sH=(temp/2)-(ch[r][c-97]-ch[(l+r)/2][c-97]);
		int mid=(l+r)/2;
		//System.out.println("fH "+fH+"  "+s.substring(mid+1, r+1)+"   "+c+"  "+(int)(mid+1)+"   "+r);
		int FT=fH+aGoodStringRec(s,mid+1,r,(char) (c+1),ch,counterCh,temp/2);
		//System.out.println(FT);
		//System.out.println("sH "+sH+"   "+s.substring(l,mid+1)+"   "+c+"   "+l+"   "+mid);
		int ST=sH+aGoodStringRec(s,l,mid,(char) (c+1),ch,counterCh,temp/2);
		//System.out.println(ST);
		return Math.min(FT,ST);
		
	}
	
	public static void aGoodString(){
		int t=sc.nextInt();
		sc.nextLine();
		for(int o=0;o<t;o++) {
			int n=sc.nextInt();
			sc.nextLine();
			String s=sc.nextLine();
			int [][]ch=new int[n][26];
			int []counterCh=new int[26];
			for(int i=0;i<s.length();i++) {
				counterCh[s.charAt(i)-97]++;
				for(int j=0;j<26;j++) {
					//System.out.println(j);
					ch[i][j]=counterCh[j];
				}	
			}
		//	for(int i=0;i<n;i++)
			//	System.out.println(Arrays.toString(ch[i]));
//			char c='a';
//			int temp=n;
//			int l=0;
//			int r=n-1;
//			int count=0;
//			while(temp>1) {
//				int mid=(l+r)/2;
//				//System.out.println(l+"  "+r+"   "+mid);
//				//System.out.println(+" "+ch[r][c-97]);
//				if(ch[mid][c-97] >ch[r][c-97]-ch[mid][c-97]) {
//				//	System.out.println(count+"  "+c+"   "+temp);
//					count+=(temp/2)-ch[(l+r)/2][c-97];
//					l=mid;
//				}
//				else {
//					count+=(temp/2)-ch[r][c-97];
//					r=mid;
//
//				}
//				//int x=temp/2;
//			//	count+=((temp/2)-Math.max(ch[(temp/2)-1][c-97], ch[temp-1][c-97]));
//
//				temp/=2;
//
//				c++;
//			}
//			//System.out.println(c+"  "+l+"  "+r);
//			if(s.charAt(l)!=c&&s.charAt(r)!=c)count++;
//			System.out.println(count);
			
			
			System.out.println(aGoodStringRec(s,0,n-1,'a',ch,counterCh,n));
			

		}
	}
	
	public static void MakeItGood() {
		int t=sc.nextInt();
		for(int o=0;o<t;o++) {
			int n=sc.nextInt();
			int a[]=new int[n];
			Integer b[]=new Integer[n];
			HashMap<Integer,Integer>h=new HashMap<Integer,Integer>();
			for(int i=0;i<n;i++){
				a[i]=sc.nextInt();
				b[i]=a[i];
				if(h.get(a[i])==null)h.put(a[i], 1);
				else h.put(a[i],h.get(a[i])+1);
			}
			if(n==1) {
				System.out.println(0);
				continue;
			}
			Arrays.sort(b);
			
			int l=0;int r=n-1;
			int m=0;
			int i=0;
			boolean f=true;
			while(l<r) {
				if(a[r]==b[i]) {
					h.put(a[r], h.get(a[r])-1);

					r--;
					i++;
				}
				else if(a[l]==b[i]&&f) {
					h.put(a[l], h.get(a[l])-1);

					l++;
					i++;
				}
				else if(a[l]==b[i]&&!f) {
					h.put(a[l], h.get(a[l])-1);

					m=l;
					f=true;
					i++;
					l++;
				}
				else {
					h.put(a[l], h.get(a[l])-1);
					f=false;
					l++;
				}
			}
            //if(!f)m+=(l);
			System.out.println(m);
			
				

		}
	}
	
	public static void MakeItGood2() {
		int t=sc.nextInt();
		for(int o=0;o<t;o++) {
			int n=sc.nextInt();
			int a[]=new int[n];
			Integer b[]=new Integer[n];
			HashMap<Integer,Integer>h=new HashMap<Integer,Integer>();
			for(int i=0;i<n;i++){
				a[i]=sc.nextInt();
				b[i]=a[i];
				if(h.get(a[i])==null)h.put(a[i], 1);
				else h.put(a[i],h.get(a[i])+1);
			}
			if(n==1) {
				System.out.println(0);
				continue;
			}
			Arrays.sort(b);
			
			int l=0;int r=n-1;
			int m=0;
			//System.out.println(h);
			for(int i=0;i<b.length&&l<r;i++) {
				if(h.get(b[i])==null||h.get(b[i])==0)continue;
				if(a[l]==b[i]) {
					h.put(b[i],h.get(b[i])-1);
					l++;
				}
				else if(a[r]==b[i]) {
					h.put(b[i],h.get(b[i])-1);
 
					r--;
				}
				else {
					h.put(a[l],h.get(a[l])-1);
					for(int j=l+1;j<r;j++) {
						h.put(a[j],h.get(a[j])-1);

						if(a[j]==b[i]) {
							m=j;
							l=j+1;
							break;
						}
							
					}
				}
				//System.out.println(h);
			}
			
			System.out.println(m);
			
				
 
		}
	}


	public static void main(String[] args) {
		//ThreePairwiseMaximums();
	//	RestorethePermutationyMerger();
		aGoodString();
		//MakeItGood2();

	}

}
