#include #include int hunterNum = 0; int grooveNum = 0; typedef struct { int x1; int y1; int x2; int y2; } groove_t; typedef struct { int x; int y; int endpoint; } vec2_t; typedef struct { int x; int y; } hunter_t; int main() { scanf("%d%d\n", &hunterNum, &grooveNum); hunter_t hunters[hunterNum]; int globalMaxY = 0; for (int i = 0; i < hunterNum; ++i) { hunters[i].x = i; hunters[i].y = 0; } 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 > globalMaxY) globalMaxY = grooves[i].y1; } ++globalMaxY; vec2_t field[hunterNum*globalMaxY]; memset(field, 0, sizeof(field)); for (int i = 0; i < grooveNum; ++i) { groove_t* groove = &grooves[i]; int pos = groove->y1*hunterNum+groove->x1; field[pos].endpoint = 1; field[pos].x = groove->x2; field[pos].y = groove->y2; pos = groove->y2*hunterNum+groove->x2; field[pos].endpoint = 1; field[pos].x = groove->x1; field[pos].y = groove->y1; } for (int n = 0; n < globalMaxY-1; ++n) { for (int i = 0; i < hunterNum; ++i) { hunter_t* hunter = &hunters[i]; ++hunter->y; int pos = hunter->y*hunterNum+hunter->x; if (field[pos].endpoint) { hunter->x = field[pos].x; } } } for (int i = 0; i < hunterNum; ++i) { printf("%d\n", hunters[i].x+1); } return 0; }