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.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.StringTokenizer;

public class SymbolPairs {
	public static void main(String[] args) throws IOException {
		Scanner sc=new Scanner(System.in);
		String s=sc.next();
		long ans=s.length();
		int []count =new int [200];
		for(char c:s.toCharArray())
			count[c]++;
		for(int x:count)
			ans+=x*1L*(x-1);
		System.out.println(ans);
		
	}
	static class Scanner 
	{
		StringTokenizer st;
		BufferedReader br;
	 
		public Scanner(InputStream s){	br = new BufferedReader(new InputStreamReader(s));}
	 
	 
		public String next() throws IOException 
		{
			while (st == null || !st.hasMoreTokens()) 
				st = new StringTokenizer(br.readLine());
			return st.nextToken();
		}
	 
		public int nextInt() throws IOException {return Integer.parseInt(next());}
	 
		public long nextLong() throws IOException {return Long.parseLong(next());}
	 
		public String nextLine() throws IOException {return br.readLine();}
	 
		public double nextDouble() throws IOException
		{
			String x = next();
			StringBuilder sb = new StringBuilder("0");
			double res = 0, f = 1;
			boolean dec = false, neg = false;
			int start = 0;
			if(x.charAt(0) == '-')
			{
				neg = true;
				start++;
			}
			for(int i = start; i < x.length(); i++)
				if(x.charAt(i) == '.')
				{
					res = Long.parseLong(sb.toString());
					sb = new StringBuilder("0");
					dec = true;
				}
				else
				{
					sb.append(x.charAt(i));
					if(dec)
						f *= 10;
				}
			res += Long.parseLong(sb.toString()) / f;
			return res * (neg?-1:1);
		}
	 
		public boolean ready() throws IOException {return br.ready();}
	 
	 
	}

	}