`​[from, to]​`​, reconstruct the itinerary in order. All of the tickets belong to a man who departs from ​`​JFK​`​. Thus, the itinerary must begin with ​`​JFK​`​.

Note:

1. If there are multiple valid itineraries, you should return the itinerary that has the smallest lexical order when read as a single string. For example, the itinerary

`​["JFK", "LGA"]​`

1.  has a smaller lexical order than

`​["JFK", "LGB"]​`

1. .
2. All airports are represented by three capital letters (IATA code).
3. You may assume all tickets form at least one valid itinerary.

Example 1:

`​tickets​`​ = ​`​[["MUC", "LHR"], ["JFK", "MUC"], ["SFO", "SJC"], ["LHR", "SFO"]]​`

Return ​`​["JFK", "MUC", "LHR", "SFO", "SJC"]​`​.Example 2:

`​tickets​`​ = ​`​[["JFK","SFO"],["JFK","ATL"],["SFO","ATL"],["ATL","JFK"],["ATL","SFO"]]​`

Return ​`​["JFK","ATL","JFK","SFO","ATL","SFO"]​`​.Another possible reconstruction is ​`​["JFK","SFO","ATL","JFK","ATL","SFO"]​`​. But it is larger in lexical order.

`class Solution {public:  vector<string> findItinerary(vector<pair<string, string>> tickets) {    map<string, multiset<string>> edges;    for (auto p : tickets){      edges[p.first].insert(p.second);    }    dfs(edges, "JFK");    return vector<string>(res.rbegin(),res.rend());  }private:  void dfs(map<string, multiset<string>> &edges, string str){    while (edges[str].size()) {      string t = *edges[str].begin();      edges[str].erase(edges[str].begin());      dfs(edges, t);    }    res.push_back(str);//放在后面  }  vector<string> res;};`

res.push_back(str);放在dfs函数中的前面会出现这样的错误

Input: [["JFK","KUL"],["JFK","NRT"],["NRT","JFK"]]

Output: ["JFK","KUL","NRT","JFK"]

Expected: ["JFK","NRT","JFK","KUL"]