#P1627. 【宽搜+状态压缩】硬币翻转

【宽搜+状态压缩】硬币翻转

Description

【问题描述】
有一排n枚硬币,一开始均正面朝上,每一次操作,你可以将任意n-1枚硬币进行翻转,现请你用最少的操作,将这n枚硬币翻转到一个指定的状态。 
【输入数据】
输入数据共两行。第一行为一个整数n(n<=12),表示硬币的数量。第二行为一个长度为n的字符串,表示指定的目标状态。字符串仅包含0和1两种符号,0表示正面朝上,1表示正面朝下。 
【输出数据】
输出数据包含若干行。第一行包含一个正整数S,表示所需的最少操作数。下面的S行,每行一个长度为n的0/1字符串,表示每操作一次后硬币的状态。所有的输入数据保证至少存在一种方案。有多种方案时,输出第一步最小的方案。若还有多种方案,则输出第二步最小的方案,依次类推。 
【输入样例】 

1111 
【输出样例】 

0111 
1100 
0001 
1111