#include <string>
#include <vector>
#include <queue>
#include <map>
#include <iostream>
using namespace std;
int solution(string begin, string target, vector<string> words) {
int answer = 0;
map<string,bool> mp;
for(auto iter:words){
mp[iter]=false;
}
queue<pair<string,int>> q;
q.push(make_pair(begin,0));
while(!q.empty()){
string tmp = q.front().first;
int cnt = q.front().second;
cout<<tmp<<endl;
q.pop();
if(target == tmp){
answer = cnt;
break;
}
for(int i = 0 ;i<words.size();i++){
int differ_cnt=0;
if(mp[words[i]])
continue;
for(int j =0;j<tmp.size();j++){
if(tmp[j]!=words[i][j])
differ_cnt++;
}
if(differ_cnt==1){
q.push(make_pair(words[i],cnt+1));
mp[words[i]]=true;
}
}
}
return answer;
}