#include<iostream>
#include<vector>
#include<string>
#include<cmath>
#include<string.h>
using namespace std;

string item[4] = {"nothing", "wolf", "sheep", "vegetable"};
string act[2] = {"_come", "_go"};
vector<string>v;//存储一次成功的结果
vector<vector<string> > result;//存储多次成功的结果
//数字0-15代表各种状态,对应0000-1111
short int state[16];//state存储是否已经访问过,避免回路

bool isValid(string s) {//s={农夫,狼,羊,蔬菜},0表示在这边,1在岸那边
    if (s[1] == s[2] && s[1] != s[0]) return false;
    if (s[2] == s[3] && s[2] != s[0]) return false;
    return true;
}
//4位二进制->int
int er_int(string s) {
    int x = 0;
    for (int i = 0; i < 4; i++) {
        x += (s[3 - i]-'0') * pow(2, i);
    }
    return x;
}

//int->4位二进制
string int_er(int number) {
    string s = "";
    int count = 4;
    while (count--) {
        s = to_string(number % 2) + s;
        number = number / 2;
    }
    return s;
}
//1->0,0->1
char change(char x){
    if(x=='0')return '1';
    else return '0';
}
//移动
void move(string& s, int i) {
    s[0] = change(s[0]); //农夫移动
    switch (i) {
        case 0://只农夫行动
            break;
        default:
            s[i]=change(s[i]);
    }
    return;
}
void solve(int x) {
    if (x == 15) {//成功
        result.push_back(v);
        return;
    }
    for (int i = 0; i < 4; i++) {
        string s = int_er(x);
        move(s, i);
        int y = er_int(s);
        if (isValid(s) && state[y] == -1) {
            state[y] = x;
            v.push_back((item[i]+act[s[0]-'0']));
            solve(y);
            //回溯
            state[y] = -1;
            v.pop_back();
        }
    }
}


int main() {
    memset(state,-1,sizeof(state));
    state[0]=0;
    solve(0);
    for(int i=0;i<result.size();i++){
        for(int j=0;j<result[i].size();j++){
            cout<<result[i][j]<<endl;
        }
        cout<<"succeed"<<endl;
    }
    
}