====== عبارت جمع ====== منظور از یک عبارت جمع، رشته‌ایست که تعریف بازگشتی زیر را برآورده می‌کند: * هر حرف کوچک لاتین، یک عبارت جمع است. * اگر $s$ و $t$ دو عبارت جمع باشند، $(s+t)$ هم یک عبارت جمع است. بر روی عبارت‌های جمع، دو عمل زیر تعریف می‌شود. عمل جابجایی در اثر این عمل، عبارت $Xs+tY$ به $Xt+sY$‌تبدیل می‌شود. عمل شرکت‌پذیری پس از اعمال آن، عبارت‌های $Xs+(t+u)Y$ و $X(s+t)+uY$ به هم تبدیل می‌شوند. توضیح آن‌که $X$ و $Y$ به نشانه‌ی یک رشته از نویسه‌های «)»، «(»، «+» و «a» تا «z» و همچنین $s$، $t$ و $u$ به نشانه‌ی یک عبارت جمع به کار رفته‌اند. به عنوان مثال عمل جابه‌جایی می‌تواند عبارت جمع $((a+(c+b))+z)$ را به یکی از عبارت‌های $((a+(b+c))+z)$، $(((c+b)+a)+z)$ و $(z+(a+(c+b)))$ تبدیل کند. همچنین عمل شرکت‌پذیری این عبارت را به یکی از عبارت‌های $(((a+c)+b)+z)$ و $(a+((c+b)+z))$ تبدیل می‌کند. برنامه‌ای بنویسید که دو عبارت جمع $s$ و $t$ را از ورودی بخواند و رشته‌ای از عبارت‌های جمع به شکل $u_2،u_1،u_0$، ...، $u_k$ را بیابد به طوری که $u_0=s$ و $u_k=t$ باشد و به ازای هر $i$ که $k ^ ورودي نمونه ^ خروجي نمونه ^ | ((a+(b+c)) \\ (b+(a+c))| ‎2 \\ (a+(c+b)) \\ ((a+c)+b) | * [[سوال ۳|سوال بعد]] * [[سوال ۱|سوال قبل]]