#include<iostream>
#include<string.h>
using namespace std;
#define MAX 100
struct STACK
{
int left;
int right;
};
int search(char t,char *str,int num)
{
int i;
for(i=0;i<num;i++)
{
if(t==str[i])
return i;
}
return -1;
}
int main()
{
char wenfa[MAX][MAX];
char str[MAX];
char zhongjiefu[MAX];
char feizhongjiefu[MAX];
char temp[MAX];
int i,j,k;
int flag1=0,flag2=0,flag3=0;
bool F[MAX][MAX];
STACK S[MAX];
int top=-1;
memset(F,false,sizeof(F));
while(cin>>str&&strcmp(str,"end"))
{
strcpy(wenfa[flag1++],str);
}
//-----------------------------------求出不重复的非终结符集和终结符集---------------------------------------------------
for(i=0;i<flag1;i++)//取非终结符;
{
if(i==0)
{
feizhongjiefu[flag2++]=wenfa[i][0];
}
else
{
for(j=0;j<flag2;j++)
{
if(wenfa[i][0]==feizhongjiefu[j])
{
break;
}
}
if(j==flag2)
{
feizhongjiefu[flag2++]=wenfa[i][0];
}
}
}
for(i=0;i<flag1;i++)//取终结符
{