class Solution {
private:
unordered_map<string, map<string,int>> targets;
bool backtracing(int tickNum, vector<string>& result){
if (result.size() == tickNum + 1){
return true;
}
for (pair<const string, int>& target : targets[result[result.size()-1]]){
if (target.second > 0){
result.push_back(target.first);
target.second--;
if (backtracing(tickNum, result))
return true;
result.pop_back();
target.second++;
}
}
return false;
}
public:
vector<string> findItinerary(vector<vector<string>>& tickets) {
targets.clear();
vector<string> result;
for (const vector<string>& vec : tickets){
targets[vec[0]][vec[1]]++;
}
result.push_back("JFK");
backtracing(tickets.size(), result);
return result;
}
};