الگو


  • محدودیت زمان: ۱ ثانیه
  • محدودیت حافظه: ۲۵۶ مگابایت

یک شرکت برنامه‌نویسی با یک الگو از اعداد دودویی مواجه می‌شود. این الگو به این صورت است که در بعضی از خانه‌های آن علامت سوال گذاشته شده است و در بقیه‌ی خانه‌ها ۰ یا ۱ آمده است. هدف این است که در هر کدام خانه‌هایی که در آن‌ها علامت سوال آمده است ۰ یا ۱ نوشته شوند. این شرکت از شما می‌خواهد برنامه‌ای بنویسید که تمامی اعداد ممکن از این الگو را به صورت نزولی چاپ کنید.

دقت کنید ترتیب نزولی به این معنا است که بزرگترین عدد دودویی در ابتدا بیاید و هر عدد دودویی در این ترتیب از عدد قبلی کوچک‌تر باشد.

هم‌چنین، عدد دودویی xx از عدد دودویی yy بزرگتر است اگر و تنها اگر در اولین محل اختلاف این دو عدد، xx شامل ۱ و yy شامل ۰ باشد. برای مثال اگر x=1100x = 1100 و y=1011y = 1011 باشد؛ xx از yy بزرگ‌تر است، زیرا اولین محل اختلاف خانه‌ی دوم است که در xx آن خانه ۱ و در yy آن خانه ۰ است.

برای درک بهتر مسئله به مثال‌ها مراجعه کنید.

ورودی🔗

ورودی این برنامه یک الگوی دودویی است که ارقام نامشخص، با علامت سوال مشخص شده‌اند. اگر طول رشته را ll و تعداد علامت‌سوال‌ها را nn در نظر بگیریم، داریم:

1l1000 1 \le l \le 1000 1n10 1 \le n \le 10

خروجی🔗

خروجی برنامه‌ باید تمامی حالات ممکن برای الگو را به صورت نزولی در سطر‌های مختلف نمایش دهد.

مثال🔗

ورودی نمونه ۱🔗

?
Plain text

خروجی نمونه ۱🔗

1
0
Plain text

در این حالت جای علامت سوال هم می‌تواند یک و هم می‌تواند صفر بیاید. پس به ترتیب نزولی ابتدا ۱ و سپس ۰ می‌آید.

ورودی نمونه ۲🔗

1?101?
Plain text

خروجی نمونه ۲🔗

111011
111010
101011
101010
Plain text

دو علامت سوال داریم که هر کدام از آن‌ها می‌توانند صفر یا یک باشند، پس در کل ۴ حالت خواهیم داشت. اگر این ۴ حالت را به صورت نزولی چاپ کنیم به صورت بالا می‌شود، زیرا 111011111011 بزرگترین عدد و 101010101010 کوچکترین عدد است.