#include<string.h>
#include<stdio.h>
#include<stdlib.h>
#pragma warning(disable : 4996)

bool check[512];
char First[512][512];

char *first(char target[512][512],bool check[],int n) {
	check[n] = true;
	int i=2,k=0,m=0;
	char rule[512][512];
	while (target[n][i]!='\0') {//拆解'|'
		if (target[n][i] != '|') {
			rule[m][k] = target[n][i];
			k++;
		}
		else {
			rule[m][k] = '\0';
			m++;
			k = 0;
		}
		i++;
	}
	rule[m][k] = '\0';
	int firstnum = 0;
	for (int j = 0; j <= m; j++) {
		int l = 0;
		while (rule[j][l] != '\0') {
			if (rule[j][l] > 'z' || rule[j][l] < 'a') {

				First[n][firstnum] = rule[j][l];
				firstnum++;
				break;
			}
			else {
				int num = 0;
				while (target[num][0] != rule[j][l]) {
					num++;
					continue;
				}
				strcat(First[n],first(target, check, num));

			}
			l++;
		}
	}
	return First[n];

}


int main() {

	char input[512][512];
	int RuleNum=0;
	do {
		gets_s(input[RuleNum]);
		check[RuleNum] = false;
		RuleNum++;
	} while (strcmp(input[RuleNum-1], "END_OF_GRAMMAR") != 0);
	int n = 0;
	while (n < RuleNum-1) {
		if (check[n] == false) {
			first(input, check,n);
		}
		n++;
	}

	printf("%d", RuleNum);

	system("pause");
}