func_code_string: #include <bits/stdc++.h>   using namespace std;   inline int read() {     int x = 0, f = 1;     char c;     do c = getchar(), f = c ==  -  ? -1 : f;     while (!isdigit(c));     do x = (x << 3) + (x << 1) + c -  0 , c = getchar();     while (isdigit(c));     return x * f;   }   struct Point {     int x, y, px, py, id;     Point() {}     Point(int x, int y, int px, int py) : x(x), y(y), px(px), py(py) {}   } a[55], ans[100020];   bool tab[55];   int b[55][55], d[55][55];   int n, m, cnt, tmp = 1, num;   inline void Move(Point &a, int x, int y) {     assert(!b[a.x + x][a.y + y]);     b[a.x + x][a.y + y] = b[a.x][a.y];     b[a.x][a.y] = 0;     ans[++cnt] = Point(a.x, a.y, a.x + x, a.y + y);     a.x += x;     a.y += y;   }   inline void Move_to(Point &a, int pos) {     Move(a, 1, 0);     while (a.y < pos) Move(a, 0, 1);     while (a.y > pos) Move(a, 0, -1);     Move(a, -1, 0);   }   inline void Swap(Point &a, Point &b) {     if (a.id == b.id) return;     if (n == 2) {       if (a.y < b.y)         Move(a, 1, 0), Move(b, 0, -1), Move(a, 0, 1), Move(a, -1, 0);       else         Move(a, 1, 0), Move(b, 0, 1), Move(a, 0, -1), Move(a, -1, 0);       return;     }     Move(a, 1, 0);     Move(b, 1, 0);     Move(b, 1, 0);     int t = a.y;     while (a.y > b.y) Move(a, 0, -1);     while (a.y < b.y) Move(a, 0, 1);     while (b.y > t) Move(b, 0, -1);     while (b.y < t) Move(b, 0, 1);     Move(a, -1, 0);     Move(b, -1, 0);     Move(b, -1, 0);   }   inline void Move1(Point &a, int x) {     while (a.x <= tmp) Move(a, 1, 0);     while (a.y > x) Move(a, 0, -1);     while (a.y < x) Move(a, 0, 1);     while (!b[a.x - 1][a.y]) Move(a, -1, 0);     tmp = max(tmp, a.x);   }   inline void Move2(Point &a, int y) {     while (a.x < y) Move(a, 1, 0);   }   int main() {     n = read();     m = read();     if (n == 1) return printf( 0 ), 0;     assert(m <= n);     for (int i = 1; i <= m; i++) {       a[i].x = read();       a[i].y = read();       a[i].id = b[a[i].x][a[i].y] = i;     }     for (int i = 1; i <= m; i++) {       a[i].px = read();       a[i].py = read();       d[a[i].px][a[i].py] = i;     }     for (int i = 0; i <= n + 1; i++)       b[i][0] = b[0][i] = b[n + 1][i] = b[i][n + 1] = 2147483647;     for (int i = 1; i <= n; i++)       for (int j = n; j >= 1; j--) {         if (!b[i][j]) continue;         int t = b[i][j];         while (!b[i][a[t].y + 1]) Move(a[t], 0, 1);       }     for (int i = 1; i <= n; i++)       for (int j = 1; j <= n; j++) {         if (!b[i][j]) continue;         num++;         int t = b[i][j];         assert(a[t].y >= num);         while (a[t].y > num) Move(a[t], 0, -1);         while (a[t].x > 1) Move(a[t], -1, 0);       }     for (int i = 1; i <= n; i++)       for (int j = 1; j <= n; j++)         if (d[i][j] && !tab[j]) {           tab[j] = true;           if (b[1][j])             Swap(a[b[1][j]], a[d[i][j]]);           else             Move_to(a[d[i][j]], j);         }     for (int j = 1; j <= n; j++)       for (int i = 1; i <= n; i++)         if (d[i][j]) Move1(a[d[i][j]], j);     for (int i = n; i >= 1; i--)       for (int j = n; j >= 1; j--)         if (d[i][j]) Move2(a[d[i][j]], i);     printf( %d n , cnt);     for (int i = 1; i <= cnt; i++)       printf( %d %d %d %d n , ans[i].x, ans[i].y, ans[i].px, ans[i].py);     return 0;   }   