Problem: After his wife's tragic death, Eurydice, Orpheus descended to the realm of death to see her. Reaching its gates was uneasy, but passing through them proved to be even more challenging. Mostly because of Cerberus, the three-headed hound of Hades. 

Orpheus, a famous poet, and musician plans to calm Cerberus with his poetry and safely walk past him. He created a very peculiar poem for Cerberus. It consists only of lowercase English letters. 

We call a poem's substring a palindrome if and only if it reads the same backwards and forwards. A string a is a substring of a string b if a can be obtained from b by deleting several (possibly zero or all) characters from the beginning and several (possibly zero or all) characters from the end.

Unfortunately, Cerberus dislikes palindromes of length greater than 1. For example in the poem abaa the hound of Hades wouldn't like substrings aba and aa.

Orpheus can only calm Cerberus if the hound likes his poetry. That's why he wants to change his poem so that it does not contain any palindrome substrings of length greater than 1.

Orpheus can modify the poem by replacing a letter at any position with any lowercase English letter. He can use this operation arbitrarily many times (possibly zero). Since there can be many palindromes in his poem, he may have to make some corrections. But how many, exactly? Given the poem, determine the minimal number of letters that have to be changed so that the poem does not contain any palindromes of length greater than 1.

Input

The first line of the input contains a single integer t (1 ≤ t ≤ 10^5) denoting the number of test cases, then t test cases follow.

The first and only line of each test case contains a non-empty string of lowercase English letters, Orpheus' poem.

The sum of the length of Orpheus' poems in all test cases will not exceed 10^5.

Output

You should output t lines, i-th line should contain a single integer, answer to the i-th test case.

Example

Input


7
babba
abaac
codeforces
zeroorez
abcdcba
bbbbbbb
a


Output


1
1
0
1
1
4
0

Note

In the first test case, we can replace the third character with c and obtain a palindrome-less poem bacba.

In the second test case, we can replace the third character with d and obtain a palindrome-less poem abdac.

In the third test case, the initial poem already doesn't contain any palindromes, so Orpheus doesn't need to change anything there.

Solution (in JAVA):

Solution:
/* package codechef; // don't place package name! */

import java.util.*;
import java.lang.*;
import java.io.*;

/* Name of the class has to be "Main" only if the class is public. */
public class Codechef
{   
	public static void main (String[] args) throws java.lang.Exception
	{  FastReader in = new FastReader(System.in);
        StringBuilder sb = new StringBuilder();
        int t=1;
        t=in.nextInt();
        while(t>0){
            --t;
            String s = in.next();
            int ch[] = new int[s.length()];
            int n = s.length();
            int ans = 0;
            for(int i= n-1;i>0;i--)
            {
                if(i == n-1)
                {
                    if(s.charAt(i) == s.charAt(i-1) && ch[i] == 0 && ch[i-1] == 0)
                    {
                        ans+=1;
                        ch[i-1]=1;
                    }   
                }
                else 
                {
                    if(s.charAt(i) == s.charAt(i-1) && ch[i] == 0 && ch[i-1] == 0)
                    {
                        ans+=1;
                        ch[i-1]=1;
                    } 
                    if(s.charAt(i-1) == s.charAt(i+1) && ch[i+1] == 0 && ch[i-1] ==0)
                    {
                        ch[i-1] = 1;
                        ans+=1;
                    }
                }
            }
            sb.append(ans+"\n");
            
        }
	    System.out.print(sb);
	}
	
    static int upper_bound(int arr[],int x){
	    int a=Arrays.binarySearch(arr,x);
	    if(a<0){
	        a*=(-1);
	    
	        return a-1; 
	    }
	    else{
	        
	        while(a<arr.length && arr[a]==x)
	           ++a;
	           return a;
	    }
	}
	static long gcd(long a ,long b)
	{
    if(a==0)
    return b;
    else return gcd(b%a,a);
    }
    
//------making a Fendwick tree ---//
	// creating a fendwick tree
	static long ftree[];
	static void buildFendwicktree(int arr[],int n)
	{
		ftree=new long[n+1];
		for(int i=0;i<n;i++)
			upftree(arr[i],i,n);
	}
	static void upftree(int value,int n,int i)
	{
		int index=i+1;
		while(index<=n)
		{
		  ftree[index]+=value;
		  index+=(index&(-index));  // adding last bit to the index 
		}
	}
	static long getSum(int index)
	{
		long sum=0;
		index+=1;
		while(index>0)
		{
			sum+=ftree[index];
			index-=(index&(-index)); // fliping last index of the tree; 
		}
		return sum;
	}
//------Fendwick tree ends ---------//
}


class sgmtree{
    int arr[];
    sgmtree(int input[],int n){
        arr=new int[100001];
        buildtree(input,1,0,n-1);
    }
    void buildtree(int input[],int si,int ss,int se){
        if(ss==se){
         arr[si]=input[ss];
         return;
        }
         int mid=(ss+se)/2;
         buildtree(input,2*si,ss,mid);
         buildtree(input,2*si+1,mid+1,se);
         arr[si]=Math.min(arr[2*si],arr[2*si+1]);
         
    }
    int query(int si,int ss,int se,int qs,int qe){
        if(qs>se  || qe<ss)
         return Integer.MAX_VALUE;
        
        if(ss>=qs && qe>=se)
        return arr[si];
        
        int mid=(ss+se)/2;
        int l=query(2*si,ss,mid,qs,qe);
        int r=query(2*si+1,mid+1,se,qs,qe);
        return Math.min(l,r);
    }
    void update(int input[],int index,int value){
        input[index]=value;
        updateutils(input,1,0,input.length-1,index);
    }
    void updateutils(int input[],int si,int ss,int se,int qi){
        if(ss==se){
            arr[si]=input[ss];
            return;
        }
        int mid=(ss+se)/2;
        if(qi<=mid)
        updateutils(input,2*si,ss,mid,qi);
        else
        updateutils(input,2*si+1,mid+1,se,qi);
        arr[si]=Math.min(arr[2*si],arr[2*si+1]);
    }
    
}
	
	/* This is for sorting first accorting to gain[1] if gain[1] is same the gain[0]
Arrays.sort(gain, (long[] l1, long[] l2) -> {
	        if(l1[1] != l2[1])return Long.compare(l2[1], l1[1]);//Sorting in non-increasing order of gain
	        return Long.compare(l1[0], l2[0]);//Choosing smallest bit among all bits having same gain
	    });
*/

class pair{
    int x,y;
    pair(int x,int y){
        this.x=x;
        this.y=y;
    }
}	
class CompareValue { 
  
    static void compare(pair arr[], int n) 
    { 
        Arrays.sort(arr, new Comparator<pair>() { 
        public int compare(pair p1, pair p2) 
            { 
                return p1.y - p2.y; 
            } 
        }); 
    } 
}
class CompareKey{
    static void compare(pair arr[],int n){
        Arrays.sort(arr,new Comparator<pair>(){
            public int compare(pair p1,pair p2)
            {
                return p2.x-p1.x;
            }
        });
    }
}
class FastReader {

    byte[] buf = new byte[2048];
    int index, total;
    InputStream in;

    FastReader(InputStream is) {
        in = is;
    }

    int scan() throws IOException {
        if (index >= total) {
            index = 0;
            total = in.read(buf);
            if (total <= 0) {
                return -1;
            }
        }
        return buf[index++];
    }

    String next() throws IOException {
        int c;
        for (c = scan(); c <= 32; c = scan()) ;
        StringBuilder sb = new StringBuilder();
        for (; c > 32; c = scan()) {
            sb.append((char) c);
        }
        return sb.toString();
    }

    String nextLine() throws IOException {
        int c;
        for (c = scan(); c <= 32; c = scan()) ;
        StringBuilder sb = new StringBuilder();
        for (; c != 10 && c != 13; c = scan()) {
            sb.append((char) c);
        }
        return sb.toString();
    }

    char nextChar() throws IOException {
        int c;
        for (c = scan(); c <= 32; c = scan()) ;
        return (char) c;
    }

    int nextInt() throws IOException {
        int c, val = 0;
        for (c = scan(); c <= 32; c = scan()) ;
        boolean neg = c == '-';
        if (c == '-' || c == '+') {
            c = scan();
        }
        for (; c >= '0' && c <= '9'; c = scan()) {
            val = (val << 3) + (val << 1) + (c & 15);
        }
        return neg ? -val : val;
    }

    long nextLong() throws IOException {
        int c;
        long val = 0;
        for (c = scan(); c <= 32; c = scan()) ;
        boolean neg = c == '-';
        if (c == '-' || c == '+') {
            c = scan();
        }
        for (; c >= '0' && c <= '9'; c = scan()) {
            val = (val << 3) + (val << 1) + (c & 15);
        }
        return neg ? -val : val;
    }
}