#include <bits/stdc++.h>
using namespace std;
inline long long int max(long long int a, long long int b) {
  return ((a > b) ? a : b);
}
inline long long int min(long long int a, long long int b) {
  return ((a > b) ? b : a);
}
inline long long int gcd(long long int a, long long int b) {
  if (b == 0) return a;
  a %= b;
  return gcd(b, a);
}
const int N = 1e5 + 5;
string s, a, b;
vector<long long int> v, goodstart(N), goodend(N);
long long int n, m, ans = 0;
struct trie {
  long long int cnt;
  trie* child[26];
  trie() {
    cnt = 0;
    for (int i = 0; i < 26; i++) child[i] = NULL;
  }
};
struct trie* root;
void insert(string s, long long int idx) {
  long long int startind = idx;
  struct trie* cur = root;
  long long int sz = s.size();
  for (int i = 0; i < sz; i++) {
    int ch = s[i] - 'a';
    if (cur->child[ch] == NULL) {
      cur->child[ch] = new struct trie();
    }
    if (!(cur->cnt)) {
      if (((idx - startind) >= (n - m)) && goodend[idx]) {
        cur->cnt = 1;
        ans++;
      }
    }
    idx++;
    cur = cur->child[ch];
  }
}
void createLPS(string& s, long long int n, vector<long long int>& lps) {
  long long int len = 0;
  lps[0] = 0;
  long long int i = 1;
  while (i < n) {
    if (s[i] == s[len]) {
      len++;
      lps[i] = len;
      i++;
    } else {
      if (len != 0) {
        len = lps[len - 1];
      } else {
        lps[i] = 0;
        i++;
      }
    }
  }
}
void KMP(string text, string pattern, long long int n, long long int m) {
  v.clear();
  long long int i = 0, j = 0;
  vector<long long int> lps(m);
  createLPS(pattern, m, lps);
  while (i < n) {
    if (pattern[j] == text[i]) {
      i++;
      j++;
    }
    if (j == m) {
      v.push_back(i - j);
      j = lps[j - 1];
    } else {
      if (i < n && pattern[j] != text[i]) {
        if (j != 0) {
          j = lps[j - 1];
        } else
          i++;
      }
    }
  }
}
void sol() {
  root = new struct trie();
  cin >> s >> a >> b;
  n = a.length();
  m = b.length();
  KMP(s, a, s.length(), n);
  for (int i = 0; i < v.size(); i++) {
    goodstart[v[i]] = 1;
  }
  KMP(s, b, s.length(), m);
  for (int i = 0; i < v.size(); i++) {
    goodend[v[i]] = 1;
  }
  for (int i = 0; i < s.length(); i++) {
    if (goodstart[i]) {
      string cur = s.substr(i);
      insert(cur, i);
    }
  }
  cout << ans << "\n";
  return;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  sol();
}
