#include #include #define maxn 512 FILE *input; char alp[26],str[10000]; int read_case() { return (fscanf(input,"%s",str)!=EOF); printf("input: %s",str); return ((str[0]=='(')||(str[0]=='{')); } char*summe(char r[26],char *str); char*faktor(char r[26],char *str) { int i,j; char *ss; if (str[0]=='(') { ss=summe(r,&str[1]); return &ss[1]; } else { for (i=0;i<26;i++) r[i]=0; for (i=1;str[i]!='}';i++) r[str[i]-'A']=1; return &str[i+1]; } } char*produkt(char r[26],char *str) { char a1[26],a2[26],*ss; int i; ss=faktor(r,str); /*printf("P: %s",ss); */ while (ss[0]=='*') { ss=faktor(a2,&ss[1]); for (i=0;i<26;i++) r[i]=(r[i]&&a2[i]); } return ss; } char* summe(char r[26],char *str) { char a2[26],*ss,v; int i; ss=produkt(r,str); printf(ss); while ((ss[0]=='+') ||(ss[0]=='-')) { v=ss[0]; printf("%c %s",v,ss); ss=produkt(a2,&ss[1]); for (i=0;i<26;i++) { if (v=='+') r[i]=(r[i]||a2[i]); else if (a2[i]) r[i]=0; } } return ss; } void solve_case() { int i; for (i=0;i<26;i++) alp[i]=0; summe(alp,str); printf("{"); for (i=0;i<26;i++) if (alp[i]) printf("%c",'A'+i); printf("}\n"); } int main() { input=fopen("friends.in","r"); assert(input!=0); while (read_case()) solve_case(); fclose(input); return 0; }