#include using namespace std; #define int long long #define rep(i, a, b) for(int i = a; i < (b); ++i) #define all(x) begin(x),end(x) #define sz(x) (int)(x).size() typedef long long ll; typedef pair pii; typedef vector vi; typedef vector> vvi; typedef vector> vpii; template using vec = vector; template using uset = unordered_set; template using umap = unordered_map; void solve() { int N, M; cin >> N >> M; multimap grooves; multimap hunters; rep(i, 1, N+1) { hunters.emplace(i, i); } rep(i, 0, M) { int xp, yp, xq, yq; cin >> xp >> yp >> xq >> yq; grooves.emplace(yp, make_pair(xp, xq)); } for (auto [yp, groove_x] : grooves) { auto [xp, xq] = groove_x; auto groove_hunter_it = hunters.find(xp); vec to_emplace; while ((groove_hunter_it = hunters.find(xp)) != hunters.end()) { auto hunter_pair = *groove_hunter_it; to_emplace.emplace_back(xq, hunter_pair.second); hunters.erase(groove_hunter_it); } while ((groove_hunter_it = hunters.find(xq)) != hunters.end()) { auto hunter_pair = *groove_hunter_it; to_emplace.emplace_back(xp, hunter_pair.second); hunters.erase(groove_hunter_it); } for (auto [xq, hunter_i]: to_emplace) { hunters.emplace(xq, hunter_i); } } vi res(N+1, -1); for (auto hunter_pair : hunters ) { res[hunter_pair.second] = hunter_pair.first; } rep(i, 1, N+1) { cout << res[i] << '\n'; } } signed main() { cin.tie(0)->sync_with_stdio(0); cin.exceptions(cin.failbit); ll T = 1; // cin >> T; rep(i, 0, T) solve(); }