#include <bits/stdc++.h>
struct node {
  int son[26];
  bool flag;
} p[2000001];
char a[2005], b[2005], c[2005];
bool flagb[2005], flagc[2005];
int lena, cnt = 1, ans = 0;
void search(int now, int pos, int t) {
  if (pos > t && flagc[pos - 1] && !p[now].flag) {
    p[now].flag = true;
    ans++;
  }
  if (pos <= lena) {
    if (!p[now].son[a[pos] - 'a']) p[now].son[a[pos] - 'a'] = ++cnt;
    search(p[now].son[a[pos] - 'a'], pos + 1, t);
  }
}
int main() {
  int i, j, lenb, lenc;
  gets(a + 1);
  gets(b + 1);
  gets(c + 1);
  lena = strlen(a + 1);
  lenb = strlen(b + 1);
  lenc = strlen(c + 1);
  for (i = 1; i <= lena - lenb + 1; i++) {
    for (j = 1; j <= lenb && a[i + j - 1] == b[j]; j++)
      ;
    flagb[i] = (j > lenb);
  }
  for (i = 1; i <= lena - lenc + 1; i++) {
    for (j = 1; j <= lenc && a[i + j - 1] == c[j]; j++)
      ;
    flagc[i + lenc - 1] = (j > lenc);
  }
  for (i = 1; i <= lena; i++)
    if (flagb[i]) search(1, i, i + ((lenb) > (lenc) ? (lenb) : (lenc)) - 1);
  printf("%d\n", ans);
  return 0;
}
