#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;
}
