Problem: There is a given string S consisting of N symbols. Your task is to find the number of ordered pairs of integers i and j such that

1. 1 ≤ i, j ≤ N

2. S[i] = S[j], that is the i-th symbol of string S is equal to the j-th.

Input

The single input line contains S, consisting of lowercase Latin letters and digits. It is guaranteed that string S in not empty and its length does not exceed 105.

Output

Print a single number which represents the number of pairs i and j with the needed property. Pairs (x, y) and (y, x) should be considered different, i.e. the ordered pairs count.

Examples

Input

great10


Output

7


Input

aaaaaaaaaa


Output

100

Solution (in JAVA):

Solution:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*; 

public class Solution {

   static ArrayList<ArrayList<Integer>> list;
	static int count=0;
	public static void main(String[] args)
    {
		FastReader fr=new FastReader();
        String s=fr.next();
        HashMap<Character,Long> map=new HashMap<>();
        for(int i=0;i<s.length();i++) {
        	char c=s.charAt(i);
        	if(map.containsKey(c)) {
        		long x=map.get(c);
        		x++;
        		map.replace(c,x);
        	}
        	else
        		map.put(c,(long)1);
        }
       long count=0;
       Iterator i=map.entrySet().iterator();
       while(i.hasNext()) {
    	   Map.Entry ele=(Map.Entry)(i.next());
    	   long val=(long)(ele.getValue());
    	   val=val*val;
    	   count+=val;
       }
        	System.out.println(count);
        
    
        	 
		
    }

}
class FastReader
{
    BufferedReader br;
    StringTokenizer st;
 
    public FastReader()
    {
        br = new BufferedReader(new
                InputStreamReader(System.in));
    }
 
    String next()
    {
        while (st == null || !st.hasMoreElements())
        {
            try
            {
                st = new StringTokenizer(br.readLine());
            }
            catch (IOException e)
            {
                e.printStackTrace();
            }
        }
        return st.nextToken();
    }
 
    int nextInt()
    {
        return Integer.parseInt(next());
    }
 
    long nextLong()
    {
        return Long.parseLong(next());
    }
 
    double nextDouble()
    {
        return Double.parseDouble(next());
    }
 
    String nextLine()
    {
        String str = "";
        try
        {
            str = br.readLine();
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
        return str;
    }
}