#include <bits/stdc++.h>
using namespace std;
struct dot {
  int x, y, id;
} st[55], ed[55];
int n, m, oc[55][55], ocf[55][55], tall = 1;
bool over[55];
struct ans {
  int a, b, c, d;
  ans(int A, int B, int C, int D) {
    a = A;
    b = B;
    c = C;
    d = D;
  }
};
vector<ans> V;
void move(dot &t, int dx, int dy) {
  V.emplace_back(t.x, t.y, t.x + dx, t.y + dy);
  assert(oc[t.x + dx][t.y + dy] == 0);
  oc[t.x][t.y] = 0;
  t.x += dx;
  t.y += dy;
  oc[t.x][t.y] = t.id;
}
void sswap(dot &x, dot &y) {
  if (x.id == y.id) return;
  if (n == 2) {
    if (x.y < y.y) {
      move(x, 1, 0);
      move(y, 0, -1);
      move(x, 0, 1);
      move(x, -1, 0);
    } else {
      move(x, 1, 0);
      move(y, 0, 1);
      move(x, 0, -1);
      move(x, -1, 0);
    }
    return;
  }
  move(x, 1, 0);
  move(y, 1, 0);
  move(y, 1, 0);
  int u = x.y, v = y.y;
  while (x.y < v) move(x, 0, 1);
  while (x.y > v) move(x, 0, -1);
  while (y.y < u) move(y, 0, 1);
  while (y.y > u) move(y, 0, -1);
  move(x, -1, 0);
  move(y, -1, 0);
  move(y, -1, 0);
}
void moveFall(dot &x, int v) {
  while (x.x < tall + 1) move(x, 1, 0);
  while (x.y < v) move(x, 0, 1);
  while (x.y > v) move(x, 0, -1);
  while (!oc[x.x - 1][x.y]) move(x, -1, 0);
  tall = max(tall, x.x);
}
void moveUp(dot &x, int v) {
  while (x.x < v) move(x, 1, 0);
}
void simple(dot &x, int v) {
  move(x, 1, 0);
  while (x.y > v) move(x, 0, -1);
  while (x.y < v) move(x, 0, 1);
  move(x, -1, 0);
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 1; i <= m; i++) {
    scanf("%d%d", &st[i].x, &st[i].y), st[i].id = i;
    oc[st[i].x][st[i].y] = i;
  }
  for (int i = 1; i <= m; i++) {
    scanf("%d%d", &ed[i].x, &ed[i].y);
    ocf[ed[i].x][ed[i].y] = i;
  }
  if (n == 1 && m == 1) {
    puts("0");
    return 0;
  }
  for (int i = 0; i <= n + 1; i++)
    oc[0][i] = oc[n + 1][i] = oc[i][0] = oc[i][n + 1] = 1e9;
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= n; j++)
      if (oc[i][j]) {
        dot &p = st[oc[i][j]];
        while (!oc[p.x][p.y - 1]) move(p, 0, -1);
      }
  int cnt = n;
  for (int i = 1; i <= n; i++)
    for (int j = n; j >= 1; j--)
      if (oc[i][j]) {
        dot &p = st[oc[i][j]];
        while (p.y < cnt) move(p, 0, 1);
        while (p.x > 1) move(p, -1, 0);
        cnt--;
      }
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= n; j++)
      if (ocf[i][j] && !over[j]) {
        if (oc[1][j]) {
          sswap(st[oc[1][j]], st[ocf[i][j]]);
        } else {
          simple(st[ocf[i][j]], j);
        }
        over[j] = 1;
      }
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= n; j++)
      if (ocf[j][i]) moveFall(st[ocf[j][i]], i);
  for (int i = 1; i <= n; i++)
    for (int j = n; j >= 1; j--)
      if (ocf[j][i]) moveUp(st[ocf[j][i]], j);
  cout << V.size() << endl;
  for (auto t : V) printf("%d %d %d %d\n", t.a, t.b, t.c, t.d);
  return 0;
}
