You are given a keyboard that consists of 26 keys. The keys are arranged sequentially in one row in a certain order. Each key corresponds to a unique lowercase Latin letter.

You have to type the word s on this keyboard. It also consists only of lowercase Latin letters.

To type a word, you need to type all its letters consecutively one by one. To type each letter you must position your hand exactly over the corresponding key and press it.

Moving the hand between the keys takes time which is equal to the absolute value of the difference between positions of these keys (the keys are numbered from left to right). No time is spent on pressing the keys and on placing your hand over the first letter of the word.

For example, consider a keyboard where the letters from 'a' to 'z' are arranged in consecutive alphabetical order. The letters 'h', 'e', 'l' and 'o' then are on the positions 8, 5, 12 and 15, respectively. Therefore, it will take |5 - 8| + |12 - 5| + |12 - 12| + |15 - 12| = 13 units of time to type the word "hello". 

Determine how long it will take to print the word s.

Input

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

The next 2t lines contain descriptions of the test cases.

The first line of a description contains a keyboard — a string of length 26, which consists only of lowercase Latin letters. Each of the letters from 'a' to 'z' appears exactly once on the keyboard.

The second line of the description contains the word s. The word has a length from 1 to 50 letters inclusive and consists of lowercase Latin letters.

Output

Print t lines, each line containing the answer to the corresponding test case. The answer to the test case is the minimal time it takes to type the word s on the given keyboard.

Example

Input


5
abcdefghijklmnopqrstuvwxyz
hello
abcdefghijklmnopqrstuvwxyz
i
abcdefghijklmnopqrstuvwxyz
codeforces
qwertyuiopasdfghjklzxcvbnm
qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
qwertyuiopasdfghjklzxcvbnm
abacaba


Output


13
0
68
0
74
1
abcdefghijklmnopqrstuvwxyz
acsacnkjanscjanjkcanc
 1
abcdefghilkjmnopqrstuvwxyz
abdes

164
 18

import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.AbstractMap;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.PriorityQueue;
import java.util.*;
import java.io.*;

// Java Template Pramod Hosahalli...
public class Solution {

	//static FastReader in = new FastReader();
	static BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
	static int mod = 1000000007;

	private static void go() throws Exception {
		char[] ch = in.readLine().toCharArray();
		Map<Character, Integer> map = new HashMap<>();
		for(int i = 0; i < ch.length; i++) map.put(ch[i], i);

		char[] fx = in.readLine().toCharArray();
		int prev = -1;
		int ans = 0;
		for(char c : fx){
			if(prev == -1) prev = map.get(c);
			else {
				ans = ans + Math.abs(map.get(c) - prev);
				prev = map.get(c);
			}
		}
		print(1, ans+"");
	}

	public static void main(String[] args) throws Exception {
		int t = pi(in.readLine());
		while(t-- > 0){
			go();
		}
		in.close();
	}

	private static double solve(long n, double[][] f)
	{
		double[][] res = new double[2][2];
		res[0][0] = 1;
		res[0][1] = 0;
		res[1][0] = 0;
		res[1][1] = 1;
		
		while(n > 0){
			if(n % 2 == 1) res = matrixmul(res,f);
			n = n >> 1;
			f = matrixmul(f, f);
		}
		return res[0][0];
	}

	private static long[][] matrixmul(long[][] a, long[][] b)
	{
		long[][] c = new long[2][2];
		for(int i = 0; i < 2; i++)
			for(int j = 0 ; j < 2; j++)
				for(int k = 0; k < 2; k++)
					c[i][k] = (c[i][k] + mul(a[i][j], b[j][k])) % mod; 
		return c;
	}

	private static double[][] matrixmul(double[][] a, double[][] b)
	{
		double[][] c = new double[2][2];
		for(int i = 0; i < 2; i++)
			for(int j = 0 ; j < 2; j++)
				for(int k = 0; k < 2; k++)
					c[i][k] = c[i][k] + a[i][j] *  b[j][k]; 
		return c;
	}

	static long mul(long a, long b) {
		return ((a % mod) * (b % mod)) % mod;
	}

	static class FastReader {
		final private int BUFFER_SIZE = 1 << 16;
		private DataInputStream din;
		private byte[] buffer;
		private int bufferPointer, bytesRead;

		public FastReader() {
			din = new DataInputStream(System.in);
			buffer = new byte[BUFFER_SIZE];
			bufferPointer = bytesRead = 0;
		}

		public FastReader(String file_name) throws IOException {
			din = new DataInputStream(new FileInputStream(file_name));
			buffer = new byte[BUFFER_SIZE];
			bufferPointer = bytesRead = 0;
		}

		public int[] readIntArray(int n) throws IOException{
			int[] fx = new int[n];
			for(int i = 0; i < n; i++) fx[i] = ni();
			return fx;
		}

		public long[] readLongArray(int n) throws IOException {
			long[] fx = new long[n];
			for(int i = 0; i < n; i++) fx[i] = nl();
			return fx;
		}

		public String readLine() throws IOException {
			byte[] buf = new byte[64]; // line length
			int cnt = 0, c;
			while ((c = read()) != -1) {
				if (c == '\n') {
					if (cnt != 0) {
						break;
					} else {
						continue;
					}
				}
				buf[cnt++] = (byte) c;
			}
			return new String(buf, 0, cnt);
		}

		public int ni() throws IOException {
			int ret = 0;
			byte c = read();
			while (c <= ' ') {
				c = read();
			}
			boolean neg = (c == '-');
			if (neg)
				c = read();
			do {
				ret = ret * 10 + c - '0';
			} while ((c = read()) >= '0' && c <= '9');

			if (neg)
				return -ret;
			return ret;
		}

		public long nl() throws IOException {
			long ret = 0;
			byte c = read();
			while (c <= ' ')
				c = read();
			boolean neg = (c == '-');
			if (neg)
				c = read();
			do {
				ret = ret * 10 + c - '0';
			} while ((c = read()) >= '0' && c <= '9');
			if (neg)
				return -ret;
			return ret;
		}

		public double nd() throws IOException {
			double ret = 0, div = 1;
			byte c = read();
			while (c <= ' ')
				c = read();
			boolean neg = (c == '-');
			if (neg)
				c = read();

			do {
				ret = ret * 10 + c - '0';
			} while ((c = read()) >= '0' && c <= '9');

			if (c == '.') {
				while ((c = read()) >= '0' && c <= '9') {
					ret += (c - '0') / (div *= 10);
				}
			}

			if (neg)
				return -ret;
			return ret;
		}

		private void fillBuffer() throws IOException {
			bytesRead = din.read(buffer, bufferPointer = 0, BUFFER_SIZE);
			if (bytesRead == -1)
				buffer[0] = -1;
		}

		private byte read() throws IOException {
			if (bufferPointer == bytesRead)
				fillBuffer();
			return buffer[bufferPointer++];
		}

		public void close() throws IOException {
			if (din == null)
				return;
			din.close();
		}
	}

	static String rl() throws Exception{
		return in.readLine();
	}

	static int pi(String s) {
		return Integer.parseInt(s);
	}

	static long pl(String s) {
		return Long.parseLong(s);
	}

	static void print(int newline, String s) {
		System.out.print(s);
		if (newline != 0) System.out.println();
		// System.out.flush();
	}

	static void print(int newline, int[] arr) {
		StringBuilder sb = new StringBuilder("");
		for(int x : arr) sb.append(x+" ");
		System.out.print(sb.toString().trim());
		if (newline != 0) System.out.println();
		// System.out.flush();
	}

	static void cprint(int x) {
		print(0, "Case #" + x + ": ");
	}

	//utility function for gcd
	private static long gcd(long a, long b)
	{
		if(a == 0 || b == 0)return a + b;
		if(a > b)return gcd(a % b, b);
		return gcd(a, b % a);
	}

	// construct sparse table : for static range queries
	static class SparseTable{
		static long[][] precompute(long[] arr)
		{
			int n = arr.length;
			int p = (int)((double)Math.log(n) / Math.log(2));
			long[][] f = new long[p+1][n];

			for(int i = 0; i < n; i++) f[0][i] = arr[i];
			for(int j = 1; j <= p; j++){
				for(int i = 0; i + (1 << j) - 1 < n; i++){
					f[j][i] = gcd(f[j-1][i], f[j-1][i + (1 << (j-1))]);
				}
			}
			return f;
		}
	}

	//Union Rank Algorithm
	static class UnionFind {
		int[] parent = null;
		int[] rank = null;

		UnionFind(int n){
			parent = new int[n];
			rank = new int[n];
			for(int i = 0; i < n; i++) parent[i] = i;
		}

		int find(int v){
			if(parent[v] != v) parent[v] = find(parent[v]);
			return parent[v];
		}

		boolean union(int x, int y) {
			int u = find(x);
			int v = find(y);

			//both belong to same set...
			if(u == v)return false;

			if(rank[u] > rank[v])
				parent[v] = u;
			else if(rank[u] < rank[v])
				parent[u] = v;
			else{
				parent[u] = v;
				rank[v]++;
			}
			return true;
		}
	}

	//Fenwick Tree Implementation
	static class BIT{
		int bit[] = null;

		BIT(int n){
			bit = new int[n+1];
		}

		private void update(int x){
			int index = x;
			while(index < bit.length){
				bit[index]+=1;
				index += (index & -index);
			}
		}

		private int sum(int l){
			int index = l-1;
			int c = 0;
			while(index > 0){
				c+=bit[index];
				index -= (index & -index);
			}
			return c;
		}
	}

	//Suffix Array Impl
	static class SuffixArray{

		// suffix array in O(n*log^2(n))
		public static Integer[] suffixArray(CharSequence s) {
			int n = s.length();
			Integer[] sa = new Integer[n];
			int[] rank = new int[n];
			for (int i = 0; i < n; i++) {
				sa[i] = i;
				rank[i] = s.charAt(i);
			}
			for (int len = 1; len < n; len *= 2) {
				long[] rank2 = new long[n];
				for (int i = 0; i < n; i++)
					rank2[i] = ((long) rank[i] << 32) + (i + len < n ? rank[i + len] + 1 : 0);

				Arrays.sort(sa, (a, b) -> Long.compare(rank2[a], rank2[b]));

				for (int i = 0; i < n; i++)
					rank[sa[i]] = i > 0 && rank2[sa[i - 1]] == rank2[sa[i]] ? rank[sa[i - 1]] : i;
			}
			return sa;
		}
	}

}