#include #include #include #include #include #define forn(i, n) for (int i = 0; i < (int)(n); i++) using namespace std; struct node { int x, c; node *l, *r; node(){} int y() {return x*543251 + (int)this*23412431 + (x^241235512)*313762;} }; node _nodes[100500]; int nodes = 0; node _null, *null = &_null; node* newNode(int x) { static int guard = false; if (!guard) { guard = true; null->c = 0; null->l = null->r = null; } node* t = _nodes + nodes++; t->l = t->r = null; t->c = 1; t->x = x; return t; } node* upd(node* t) { if (t != null) t->c = t->l->c + t->r->c + 1; return t; } void split(node* t, node *&l, node *&r, int k) { if (t == null) return (void)(l = r = null); if (t->l->c + 1 > k) split(t->l, l, t->l, k), r = t; else split(t->r, t->r, r, k-t->l->c-1), l = t; upd(r); upd(l); } node* merge(node* l, node* r) { if (l == null) return r; if (r == null) return l; if (r->y() > l->y()){ r->l = merge(l, r->l); return upd(r); } else { l->r = merge(l->r, r); return upd(l); } } void out(node* t) { if (t != null) { out(t->l); assert(printf("%d ", t->x)); out(t->r); } } node* build(const vector& a, int l, int r) { if (r-l == 1) return newNode(a[l]); return merge(build(a, l, (l+r)/2), build(a, (l+r)/2, r)); } node* t; void mtf(int lq, int rq) { node *l, *m, *r; split(t, m, r, rq+1); split(m, l, m, lq); t = merge(m, merge(l, r)); } int main() { newNode(0); freopen("movetofront.in", "r", stdin); freopen("movetofront.out", "w", stdout); int n, q; vector a; assert(scanf("%d %d", &n, &q) == 2); t = null; forn(i, n) t = merge(t, newNode(i+1)); forn(i, q) { int u, v; assert(scanf("%d%d", &u, &v) == 2); mtf(u-1, v-1); } out(t); assert(printf("\n")); return 0; }