#include<iostream>
using namespace std;
char c[101];//存放棋子
int sp;//存放--的起始位置
int st;//记录移动的总步骤
int n;//白旗的数量
//打印棋子
void print(){
int i;
cout<<"step"<<st<<":";
for(i = 1;i <=2 * n + 2;i++){
cout<<c[i];
}
cout<<endl;
st++;
}
//初始化棋盘
void init(int n){
int i;
st = 0;
sp = 2 * n + 1;//-空格第一次所在的位置
//设置白子
for(i = 1;i <= n;i++){
c[i] = 'o';
}
//设置黑子
for(i = n + 1;i <= 2 * n;i++){
c[i] = '*';
}
c[2 * n + 1] = '-';
c[2 * n + 2] = '-';
print();
}
//k表示需要移动的棋子的起始位置
void move(int k){
//空格放棋子
c[sp] = c[k];
c[sp + 1] = c[k + 1];
//棋子放空格
c[k] = '-';
c[k + 1] = '-';
//移动结束后,新的空格的位置就是原来棋子的位置
sp = k;
print();
}
//递归移动,剩余4个棋子特殊处理
void mv(int n){
int i,k;
//只剩4个要特殊处理
if(n == 4){
move(4);
move(8);
move(2);
move(7);
move(1);
} else{
move(n);
move(2 * n - 1);
//n的数量减少1
mv(n - 1);
}
}
int main(){
cin>>n;
init(n);
mv(n);
}
/**************************************************************
Problem: 1237
User: admin
Language: C++
Result: Accepted
Time:5 ms
Memory:2072 kb
****************************************************************/