Let's call left cyclic shift of some string t_1 t_2 t_3 ... t_{n - 1} t_n as string t_2 t_3 ... t_{n - 1} t_n t_1.

Analogically, let's call right cyclic shift of string t as string t_n t_1 t_2 t_3 ... t_{n - 1}.

Let's say string t is good if its left cyclic shift is equal to its right cyclic shift.

You are given string s which consists of digits 0–9.

What is the minimum number of characters you need to erase from s to make it good?

Input

The first line contains single integer t (1 ≤ t ≤ 1000) — the number of test cases.

Next t lines contains test cases — one per line. The first and only line of each test case contains string s (2 ≤ |s| ≤ 2 ⋅ 10^5). Each character s_i is digit 0–9.

It's guaranteed that the total length of strings doesn't exceed 2 ⋅ 10^5.

Output

For each test case, print the minimum number of characters you need to erase from s to make it good.

Example

Input


3
95831
100120013
252525252525


Output


3
5
0

Note

In the first test case, you can erase any 3 characters, for example, the 1-st, the 3-rd, and the 4-th. You'll get string 51 and it is good.

In the second test case, we can erase all characters except 0: the remaining string is 0000 and it's good.

In the third test case, the given string s is already good.
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.StringTokenizer;

public class ER92C {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int t = scn.nextInt();
		while (t > 0) {
			String s = scn.next();
			int len = s.length();
			int ans = len;
//			for (int i = 0; i <= 9; ++i) {
//				ans = Math.min(ans, len - single(s, (char) (i + '0')));
//			}
			for (int i = 0; i < 10; ++i) {
				for (int j = 0; j < 10; ++j) {
//					int x = two(s, (char) (i + '0'), (char) (j + '0'));
//					int y = two(s, (char) (j + '0'), (char) (i + '0'));
//					if (x % 2 == 1) {
//						x--;
//					}
//					if (y % 2 == 1) {
//						y--;
//					}
					int x = func(s, (char) (i + '0'), (char) (j + '0'));
					ans = Math.min(ans, len - x);
//					
//					ans = Math.min(ans, len - y);
//					ans = Math.min(ans, len - x);
				}
			}
			out.println(ans);
			t--;
		}
		out.close();
	}

	public static int func(String s, char o, char t) {

		int count = 0;
		for (int i = 0; i < s.length(); ++i) {
			char c = s.charAt(i);
			if (c == o) {
				count++;
				char temp = o;
				o = t;
				t = temp;
			}
		}

		if (o == t) {
			return count;
		} else {
			if (count % 2 == 1) {
				count--;
			}
			return count;
		}

	}

	public static int two(String s, char o, char t) {

		int k = 0;
		while (k < s.length() && s.charAt(k) != o) {
			k++;
		}

		if (k == s.length()) {
			return 0;
		}

		boolean flag = true;
		int count = 1;
		if (s.charAt(k) == t) {
			flag = false;
		} else {
			flag = true;
		}
		k++;

		while (k < s.length()) {
			char c = s.charAt(k);
			if (flag) {
				if (c == t) {
					count++;
					flag = false;
				}
			} else {
				if (c == o) {
					count++;
					flag = true;
				}
			}

			k++;
		}
		return count;
	}

	public static int single(String s, char c) {

		int count = 0;
		for (int i = 0; i < s.length(); ++i) {
			if (s.charAt(i) == 'c') {
				count++;
			}
		}
		return count;
	}

	static FastScanner scn = new FastScanner();
	static PrintWriter out = new PrintWriter(new BufferedOutputStream(System.out));

	static class FastScanner {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer("");

		String next() {
			while (!st.hasMoreTokens())
				try {
					st = new StringTokenizer(br.readLine());
				} catch (IOException e) {
					e.printStackTrace();
				}
			return st.nextToken();
		}

		int nextInt() {
			return Integer.parseInt(next());
		}

		int[] readArray(int n) {
			int[] a = new int[n];
			for (int i = 0; i < n; i++)
				a[i] = nextInt();
			return a;
		}

		long nextLong() {
			return Long.parseLong(next());
		}
	}
}
