class Solution {
public:
    vector<int> findOrder(vector<vector<int> >& prerequisites, int n) {
        vector<int> ans;
        set<int> tmp;
        map<int, int> dic;
        int i,c = 0;
        for(i = 0;i<prerequisites.size();i++)
        {
            dic[prerequisites[i][0]]++;
            dic[prerequisites[i][1]]++;
        }
        map<int,int>::iterator it;
        for(it = dic.begin();it!=dic.end();it++)
        {
            if(it->second % 2==0) c++;
            tmp.insert(it->first);
        }
        if(c==n) return ans;
        set<int>::iterator s;
        for(s = tmp.begin();s!=tmp.end();s++)
        {
            ans.push_back(*s);
        }
        if(ans.size()==n) return ans;
        sort(ans.begin(), ans.end());
        for(i=ans.size();i<n;i++)
        {
            ans.push_back(ans[i-1]+1);
        }
        return ans;
    }
};