Problem:
C: Common Palindromes

ICPC で良い成績を収めるには修行が欠かせない．うさぎは ICPC で勝ちたいので，今日も修行をすることにした．

今日の修行は，文字列中にある回文を探すことによって，文章から隠れたメッセージを読解する能力を高めようというものである．回文はたくさんあるかもしれないので，探すついでに個数も数えてしまいたい．

2 つの文字列 S, T が与えられるので，以下を満たす整数の組 (i, j, k, l) の個数を求めたい．

1 ≤ i ≤ j ≤ (S の長さ)．

1 ≤ k ≤ l ≤ (T の長さ)．

S の i 文字目から j 文字目までを取り出した部分文字列は，T の k 文字目から l 文字目までを取り出した部分文字列と同一であり，さらにこれらは回文 (左から読んでも右から読んでも同じになる文字列) となっている．

Input

S
T

文字列 S, T はともに長さが 1 以上 50,000 以下であり，アルファベット大文字からなる．

Output

条件を満たす整数の組 (i, j, k, l) の個数を 1 行に出力せよ．

Sample Input 1

ICPC
CPCPC

Sample Output 1

10

Sample Input 2

BABBAB
ABBA

Sample Output 2

14

Sample Input 3

MYON
USAGI

Sample Output 3

0

Solution in C (judge verdict: Time Limit Exceeded)

#include<stdio.h>
#include<string.h>

void change(char data1[],char data2[],int num,int start){
    int i;
    for(i=0;i<num;i++){
        data2[i] = data1[i+start];
    }
    data2[i]='\0';
}
int Count(char data1[],char data2[]){
    int i;
    int j=0;
    int num;
    int count = 0;
    char *c;
    num = strlen(data2);
    c = (char *)malloc( sizeof(char) *num+1);

    do{
        for(i=0;i<num;i++){
            c[i] = data1[i+j];
        }
        c[i]='\0';
        if(strcmp(c,data2)==0){
            count++;
        }
    j++;
    }while(data1[j+num-1]!=NULL);
   // free(c);
    return count;
}

int chack(char data[]){    
    int num;
    int i;
    char *s;
    num = strlen(data);
    s = (char *)malloc( sizeof(char) *num);
    for(i=0;i<num;i++){
        s[i]=data[num-i-1];
    }
    s[i]='\0';
    if(strcmp(s,data)==0){
       // free(s);    
        return 1;
    }
    else{
       // free(s);
        return 0;
    }
}
int main(){

    char S[50000]="aaa";
    char T[50000]="a";
    char *C;
    int s;
    int t;
    int output;
    int i,j;
    
    gets(S);
    gets(T);
    
    s=strlen(S);
    t=strlen(T);
    
    C = (char *)malloc( sizeof(char) *t);
    
    for(i=1;i<t+1;i++){
        for(j=0;j<t;j++){
            if(j+i<=t){
                change(T,C,i,j);
                if(chack(C)==1){
                    output += Count(S,C);
                }
            }
        }
    }
    printf("%d\n",output);
   // free(C);
    
    return 0;
}