#include using namespace std; struct Nod{ int v = 0; Nod *g1; //slash Nod *g2; //dot }; char c[27][5], x, a[100001]; int n, maxim = 0; void Read(); Nod* Rezolva(Nod *G, char ch, int p); //void Debug(Nod *G, int i); //char b[100000]; int main() { Nod* G = new Nod; Nod* AUX; G->g1 = 0; G->g2 = 0; Read(); cin >> n; for ( int i = 0; i < n; ++i ) // pt fiecare cuvant { cin >> a; AUX = G; for ( int j = 0; a[j]; ++j ) // pt fiecare litera AUX = Rezolva(AUX, a[j], 0); AUX->v++; if ( AUX->v > maxim ) maxim = AUX->v; } cout << maxim; return 0; } void Read() { for ( int i = 0; i < 26; ++i ) cin >> x >> c[i]; } Nod* Rezolva(Nod* G, char ch, int p) { if (c[ch-97][p] == 0 ) { return G; } if ( c[ch-97][p] == '-' ) { if ( G->g1 == 0 ) { G->g1 = new Nod; G->g1->g1 = 0; G->g1->g2 = 0; } return Rezolva(G->g1, ch, p+1); } if ( c[ch-97][p] == '.' ) { if ( G->g2 == 0 ) { G->g2 = new Nod; G->g2->g1 = 0; G->g2->g2 = 0; } return Rezolva(G->g2, ch, p+1); } return 0; } /* void Debug(Nod *G, int i) { if ( G == 0 ) return; if ( G->v != 0 ) { b[i] = 0; cout << b << ' ' << G->v << '\n'; } b[i] = '-'; Debug(G->g1, i+1); b[i] = '.'; Debug(G->g2, i+1); } */