#include <stdio.h>
#include <string.h>
#include <ctype.h>
char input[ 100 ] , stack[ 100 ] ;
int top = - 1 ;
void push( char c) {
stack[ ++ top] = c;
stack[ top + 1 ] = '\0 ' ;
}
void reduce( ) {
// E -> id
if ( top
>= 0 && isalpha ( stack
[ top
] ) ) { stack[ top] = 'E' ;
}
// E -> (E)
if ( top >= 2 && stack[ top] == ')' && stack[ top - 1 ] == 'E' && stack[ top - 2 ] == '(' ) {
stack[ top - 2 ] = 'E' ;
top -= 2 ;
stack[ top + 1 ] = '\0 ' ;
}
// E -> E + E
if ( top >= 2 && stack[ top] == 'E' && stack[ top - 1 ] == '+' && stack[ top - 2 ] == 'E' ) {
stack[ top - 2 ] = 'E' ;
top -= 2 ;
stack[ top + 1 ] = '\0 ' ;
printf ( "Reduce: E -> E + E\n " ) ; }
// E -> E * E
if ( top >= 2 && stack[ top] == 'E' && stack[ top - 1 ] == '*' && stack[ top - 2 ] == 'E' ) {
stack[ top - 2 ] = 'E' ;
top -= 2 ;
stack[ top + 1 ] = '\0 ' ;
printf ( "Reduce: E -> E * E\n " ) ; }
}
int main( ) {
scanf ( " %[^\n ]" , input
) ; // بدل fgets
for ( int i = 0 ; input[ i] != '\0 ' ; i++ ) {
if ( input[ i] == ' ' )
continue ;
push( input[ i] ) ;
reduce( ) ;
}
else
return 0 ;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KI2luY2x1ZGUgPGN0eXBlLmg+CgpjaGFyIGlucHV0WzEwMF0sIHN0YWNrWzEwMF07CmludCB0b3AgPSAtMTsKCnZvaWQgcHVzaChjaGFyIGMpIHsKICAgIHN0YWNrWysrdG9wXSA9IGM7CiAgICBzdGFja1t0b3AgKyAxXSA9ICdcMCc7Cn0KCnZvaWQgcmVkdWNlKCkgewogICAgLy8gRSAtPiBpZAogICAgaWYgKHRvcCA+PSAwICYmIGlzYWxwaGEoc3RhY2tbdG9wXSkpIHsKICAgICAgICBzdGFja1t0b3BdID0gJ0UnOwogICAgICAgIHByaW50ZigiUmVkdWNlOiBFIC0+IGlkXG4iKTsKICAgIH0KCiAgICAvLyBFIC0+IChFKQogICAgaWYgKHRvcCA+PSAyICYmIHN0YWNrW3RvcF0gPT0gJyknICYmIHN0YWNrW3RvcCAtIDFdID09ICdFJyAmJiBzdGFja1t0b3AgLSAyXSA9PSAnKCcpIHsKICAgICAgICBzdGFja1t0b3AgLSAyXSA9ICdFJzsKICAgICAgICB0b3AgLT0gMjsKICAgICAgICBzdGFja1t0b3AgKyAxXSA9ICdcMCc7CiAgICAgICAgcHJpbnRmKCJSZWR1Y2U6IEUgLT4gKEUpXG4iKTsKICAgIH0KCiAgICAvLyBFIC0+IEUgKyBFCiAgICBpZiAodG9wID49IDIgJiYgc3RhY2tbdG9wXSA9PSAnRScgJiYgc3RhY2tbdG9wIC0gMV0gPT0gJysnICYmIHN0YWNrW3RvcCAtIDJdID09ICdFJykgewogICAgICAgIHN0YWNrW3RvcCAtIDJdID0gJ0UnOwogICAgICAgIHRvcCAtPSAyOwogICAgICAgIHN0YWNrW3RvcCArIDFdID0gJ1wwJzsKICAgICAgICBwcmludGYoIlJlZHVjZTogRSAtPiBFICsgRVxuIik7CiAgICB9CgogICAgLy8gRSAtPiBFICogRQogICAgaWYgKHRvcCA+PSAyICYmIHN0YWNrW3RvcF0gPT0gJ0UnICYmIHN0YWNrW3RvcCAtIDFdID09ICcqJyAmJiBzdGFja1t0b3AgLSAyXSA9PSAnRScpIHsKICAgICAgICBzdGFja1t0b3AgLSAyXSA9ICdFJzsKICAgICAgICB0b3AgLT0gMjsKICAgICAgICBzdGFja1t0b3AgKyAxXSA9ICdcMCc7CiAgICAgICAgcHJpbnRmKCJSZWR1Y2U6IEUgLT4gRSAqIEVcbiIpOwogICAgfQp9CgppbnQgbWFpbigpIHsKICAgIHByaW50ZigiRW50ZXIgRXhwcmVzc2lvbjogIik7CiAgICAKICAgIHNjYW5mKCIgJVteXG5dIiwgaW5wdXQpOyAvLyDYqNiv2YQgZmdldHMKCiAgICBmb3IgKGludCBpID0gMDsgaW5wdXRbaV0gIT0gJ1wwJzsgaSsrKSB7CgogICAgICAgIGlmIChpbnB1dFtpXSA9PSAnICcpCiAgICAgICAgICAgIGNvbnRpbnVlOwoKICAgICAgICBwdXNoKGlucHV0W2ldKTsKICAgICAgICBwcmludGYoIlNoaWZ0OiAlc1xuIiwgc3RhY2spOwoKICAgICAgICByZWR1Y2UoKTsKICAgIH0KCiAgICBpZiAoc3RyY21wKHN0YWNrLCAiRSIpID09IDApCiAgICAgICAgcHJpbnRmKCJTdHJpbmcgQWNjZXB0ZWRcbiIpOwogICAgZWxzZQogICAgICAgIHByaW50ZigiU3RyaW5nIFJlamVjdGVkXG4iKTsKCiAgICByZXR1cm4gMDsKfQ==