Problem:
Score : 500 points

Problem Statement

You have a string A = A_1 A_2 ... A_n consisting of lowercase English letters.

You can choose any two indices i and j such that 1 \leq i \leq j \leq n and reverse substring A_i A_{i+1} ... A_j.

You can perform this operation at most once.

How many different strings can you obtain?

Constraints

1 \leq |A| \leq 200,000

A consists of lowercase English letters.

Input

Input is given from Standard Input in the following format:

A

Output

Print the number of different strings you can obtain by reversing any substring in A at most once.

Sample Input 1

aatt

Sample Output 1

5

You can obtain aatt (don't do anything), atat (reverse A[2..3]), atta (reverse A[2..4]), ttaa (reverse A[1..4]) and taat (reverse A[1..3]).

Sample Input 2

xxxxxxxxxx

Sample Output 2

1

Whatever substring you reverse, you'll always get xxxxxxxxxx.

Sample Input 3

abracadabra

Sample Output 3

44

Solution in C (GCC 5.4.1) (judge verdict: Wrong Answer)

#include<stdio.h>
int main(void){
    char word1,word[999999];
    int i,n=0,kazu[999999],j;
    int A[26],a,m=1;
    long S[26];
    for(i=0;i<26;i++){
        A[i]=0;
        S[i]=1;
    }
    while(scanf("%c",&word1)!=EOF){
        word[n]=word1;
        n++;
    }
    long sum=1;
    
    for(i=0;i<n;i++){
        sum=sum*(i+1);
        kazu[i]=word[i];
        if(kazu[i]==65){
            A[0]++;
        }else if(kazu[i]==66){
            A[1]++;
        }else if(kazu[i]==67){
            A[2]++;
        }else if(kazu[i]==68){
            A[3]++;
        }else if(kazu[i]==69){
            A[4]++;
        }else if(kazu[i]==70){
            A[5]++;
        }else if(kazu[i]==71){
            A[6]++;
        }else if(kazu[i]==72){
            A[7]++;
        }else if(kazu[i]==73){
            A[8]++;
        }else if(kazu[i]==74){
            A[9]++;
        }else if(kazu[i]==75){
            A[10]++;
        }else if(kazu[i]==76){
            A[11]++;
        }else if(kazu[i]==77){
            A[12]++;
        }else if(kazu[i]==78){
            A[13]++;
        }else if(kazu[i]==79){
            A[14]++;
        }else if(kazu[i]==80){
            A[15]++;
        }else if(kazu[i]==81){
            A[16]++;
        }else if(kazu[i]==82){
            A[17]++;
        }else if(kazu[i]==83){
            A[18]++;
        }else if(kazu[i]==84){
            A[19]++;
        }else if(kazu[i]==85){
            A[20]++;
        }else if(kazu[i]==86){
            A[21]++;
        }else if(kazu[i]==87){
            A[22]++;
        }else if(kazu[i]==88){
            A[23]++;
        }else if(kazu[i]==89){
            A[24]++;
        }else if(kazu[i]==90){
            A[25]++;
        }
    }
       long SS=1;
    for(i=0;i<=25;i++){
        if(A[i]>1){
            for(j=1;j<=A[i];j++){
                S[i]=S[i]*j;
            }
        }
        SS=SS*S[i];
    }
    printf("%ld\n",(sum/SS));
    
    return 0;
}