#include <bits/stdc++.h>
using namespace std;
const long long po = 90000011;
long long Hasz(vector<long long>& H, vector<long long>& P, int p, int k) {
  return (H[p] - P[k - p + 1] * H[k + 1]);
}
int main() {
  ios_base::sync_with_stdio(0);
  string nap, p, k;
  cin >> nap >> p >> k;
  int dl = nap.size();
  vector<long long> P(2010);
  P[0] = 1;
  for (int i = 1; i < 2010; ++i) P[i] = P[i - 1] * po;
  vector<long long> H(dl + 1, 0);
  for (int i = dl - 1; i >= 0; --i) H[i] = H[i + 1] * po + nap[i];
  vector<long long> hp(p.size() + 1, 0);
  for (int i = p.size() - 1; i >= 0; --i) hp[i] = hp[i + 1] * po + p[i];
  vector<long long> hk(k.size() + 1, 0);
  for (int i = k.size() - 1; i >= 0; --i) hk[i] = hk[i + 1] * po + k[i];
  long long Hp = Hasz(hp, P, 0, p.size() - 1);
  long long Hk = Hasz(hk, P, 0, k.size() - 1);
  if (dl < p.size() || dl < k.size()) {
    cout << "0";
    return 0;
  }
  vector<long long> wystp;
  for (int i = 0; i <= dl - p.size(); ++i) {
    long long t = Hasz(H, P, i, i + p.size() - 1);
    if (t == Hp) wystp.push_back(i);
  }
  vector<long long> wystk;
  for (int i = 0; i <= dl - k.size(); ++i) {
    long long t = Hasz(H, P, i, i + k.size() - 1);
    if (t == Hk) wystk.push_back(i);
  }
  int pocz = 0, kon = 0, ost = 0;
  vector<long long> zb;
  while (pocz < wystp.size()) {
    kon = ost;
    while (kon < wystk.size() && wystk[kon] < wystp[pocz]) ++kon;
    ost = kon;
    while (kon < wystk.size()) {
      if (wystp[pocz] + p.size() - 1 <= wystk[kon] + k.size() - 1) {
        zb.push_back(Hasz(H, P, wystp[pocz], wystk[kon] + k.size() - 1));
      }
      ++kon;
    }
    ++pocz;
  }
  if (zb.size() == 0) {
    cout << "0";
    return 0;
  }
  sort(zb.begin(), zb.end());
  zb.push_back(zb[zb.size() - 1] - 1);
  long long il = 0;
  for (int i = 0; i < zb.size() - 1; ++i)
    if (zb[i] != zb[i + 1]) ++il;
  cout << il;
  return 0;
}
