#include int hunterNum; int grooveNum; typedef struct { int x1; int y1; int x2; int y2; } groove_t; typedef struct { int x; int y; int moving; } hunter_t; int main() { scanf("%d%d\n", &hunterNum, &grooveNum); hunter_t hunters[hunterNum]; int maxY[hunterNum]; for (int i = 0; i < hunterNum; ++i) { maxY[i] = 0; hunters[i].x = i; hunters[i].y = 0; hunters[i].moving = 1; } groove_t grooves[grooveNum]; for (int i = 0; i < grooveNum; ++i) { scanf("%d%d%d%d\n", &grooves[i].x1, &grooves[i].y1, &grooves[i].x2, &grooves[i].y2); --grooves[i].x1; --grooves[i].x2; if (grooves[i].y1 > maxY[grooves[i].x1]) maxY[grooves[i].x1] = grooves[i].y1; if (grooves[i].y2 > maxY[grooves[i].x2]) maxY[grooves[i].x2] = grooves[i].y2; } int moved = 0; do { moved = 0; for (int i = 0; i < hunterNum; ++i) { hunter_t* hunter = &hunters[i]; if (!hunter->moving) { continue; } ++hunter->y; moved = 1; for (int j = 0; j < grooveNum; ++j) { groove_t* groove = &grooves[j]; if (hunter->y == groove->y1) { if (hunter->x == groove->x1) { hunter->x = groove->x2; } else if (hunter->x == groove->x2) { hunter->x = groove->x1; } } } if (hunter->y == maxY[hunter->x]) hunter->moving = 0; } } while (moved); for (int i = 0; i < hunterNum; ++i) { printf("%d\n", hunters[i].x+1); } return 0; }