/* -*- coding: utf-8 -*- * * 3714.cc: No.3714 Prefix Team Name - yukicoder */ #include #include #include #include using namespace std; /* constant */ const int MAX_N = 50; /* typedef */ using vs = vector; /* global variables */ string ss[3]; int ls[3]; vs svs[MAX_N * 3 + 1]; /* subroutines */ /* main */ int main() { for (int i = 0; i < 3; i++) { char s[MAX_N + 4]; scanf("%s", s); ss[i] = string(s); ls[i] = (int)ss[i].size(); } for (int l0 = 1; l0 <= ls[0]; l0++) for (int l1 = 1; l1 <= ls[1]; l1++) for (int l2 = 1; l2 <= ls[2]; l2++) { string ts[3] = { ss[0].substr(0, l0), ss[1].substr(0, l1), ss[2].substr(0, l2) }; int ps[3] = {0, 1, 2}; do { string w; for (int i = 0; i < 3; i++) w += ts[ps[i]]; svs[l0 + l1 + l2].push_back(w); } while (next_permutation(ps, ps + 3)); } int l = ls[0] + ls[1] + ls[2]; int sum = 0; for (int i = 1; i <= l; i++) { auto &sv = svs[i]; sort(sv.begin(), sv.end()); sv.erase(unique(sv.begin(), sv.end()), sv.end()); sum += (int)sv.size(); //printf(" i=%d: sz=%d\n", i, (int)sv.size()); } printf("%d\n", sum); return 0; }