#include <bits/stdc++.h>
using namespace std;
template <typename T>
inline bool upmin(T &x, T y) {
  return y < x ? x = y, 1 : 0;
}
template <typename T>
inline bool upmax(T &x, T y) {
  return x < y ? x = y, 1 : 0;
}
const long double pi = acos(-1);
const int oo = 1 << 30;
const long long OO = 1LL << 62;
const int mod = 1e9 + 7;
int qpow(int x, int y) {
  int ans = 1;
  while (y) {
    if (y & 1) ans = 1LL * ans * x % mod;
    x = 1LL * x * x % mod;
    y >>= 1;
  }
  return ans;
}
int gi() {
  int w = 0;
  bool q = 1;
  char c = getchar();
  while ((c < '0' || c > '9') && c != '-') c = getchar();
  if (c == '-') q = 0, c = getchar();
  while (c >= '0' && c <= '9') w = w * 10 + c - '0', c = getchar();
  return q ? w : -w;
}
namespace io {
const int L = (1 << 21) + 1;
char ibuf[L], *iS, *iT, obuf[L], *oS = obuf, *oT = obuf + L - 1, c, st[55];
int f, tp;
inline char getc() {
  return (iS == iT ? (iT = (iS = ibuf) + fread(ibuf, 1, L, stdin),
                      (iS == iT ? EOF : *iS++))
                   : *iS++);
}
inline void flush() {
  fwrite(obuf, 1, oS - obuf, stdout);
  oS = obuf;
}
inline void putc(char x) {
  *oS++ = x;
  if (oS == oT) flush();
}
template <class I>
inline bool gi(I &x) {
  for (f = 1, c = (iS == iT ? (iT = (iS = ibuf) + fread(ibuf, 1, L, stdin),
                              (iS == iT ? EOF : *iS++))
                            : *iS++);
       c < '0' || c > '9';
       c = (iS == iT ? (iT = (iS = ibuf) + fread(ibuf, 1, L, stdin),
                       (iS == iT ? EOF : *iS++))
                     : *iS++))
    if (c == '-')
      f = -1;
    else if (c == -1)
      return false;
  for (x = 0; c <= '9' && c >= '0';
       c = (iS == iT ? (iT = (iS = ibuf) + fread(ibuf, 1, L, stdin),
                       (iS == iT ? EOF : *iS++))
                     : *iS++))
    x = x * 10 + (c & 15);
  x *= f;
  return true;
}
template <class I>
inline void print(I x) {
  if (!x) putc('0');
  if (x < 0) putc('-'), x = -x;
  while (x) st[++tp] = x % 10 + '0', x /= 10;
  while (tp) putc(st[tp--]);
}
inline bool gs(char *s, int &l) {
  for (c = (iS == iT ? (iT = (iS = ibuf) + fread(ibuf, 1, L, stdin),
                       (iS == iT ? EOF : *iS++))
                     : *iS++);
       c < 'a' || c > 'z';
       c = (iS == iT ? (iT = (iS = ibuf) + fread(ibuf, 1, L, stdin),
                       (iS == iT ? EOF : *iS++))
                     : *iS++))
    if (c == -1) return false;
  for (l = 0; c <= 'z' && c >= 'a';
       c = (iS == iT ? (iT = (iS = ibuf) + fread(ibuf, 1, L, stdin),
                       (iS == iT ? EOF : *iS++))
                     : *iS++))
    s[l++] = c;
  s[l] = 0;
  return true;
}
inline void printld(double x, int digit) {
  if (x < 0) putc('-'), x = -x;
  x += 0.5 * pow(0.1, digit);
  print((long long)x), putc('.');
  for (x -= (long long)x; digit; --digit)
    x = x * 10, putc((int)x + '0'), x -= (int)x;
}
inline void ps(const char *s) {
  for (int i = 0, n = strlen(s); i < n; i++) putc(s[i]);
}
struct IOFLUSHER {
  ~IOFLUSHER() { flush(); }
} _ioflusher_;
};  // namespace io
using io::getc;
using io::gi;
using io::gs;
using io::print;
using io::printld;
using io::ps;
using io::putc;
const int N = 51;
int a[N][N];
int id[N][N];
int x[N], y[N], tx[N], ty[N];
vector<pair<pair<int, int>, pair<int, int>>> ans;
void walk(int a, int b, int c, int d) {
  id[c][d] = id[a][b];
  id[a][b] = 0;
  ans.push_back(make_pair(make_pair(a, b), make_pair(c, d)));
}
int cnt, vis[N][N], pre[N][N];
const int dx[4] = {1, -1, 0, 0};
const int dy[4] = {0, 0, 1, -1};
int qx[N * N], qy[N * N];
int sa[N], rk[N];
void move(int x1, int y1, int x2, int y2) {
  if (x1 == x2 && y1 == y2) return;
  assert(!id[x2][y2]);
  int w = id[x1][y1];
  id[x1][y1] = 0;
  vis[x2][y2] = ++cnt;
  pre[x2][y2] = -1;
  int l = 0, r = 1;
  qx[1] = x2;
  qy[1] = y2;
  while (vis[x1][y1] != cnt) {
    int x = qx[++l], y = qy[l];
    for (int t = 0; t < 4; t++)
      if (id[x + dx[t]][y + dy[t]] == 0 && vis[x + dx[t]][y + dy[t]] != cnt) {
        ++r;
        vis[x + dx[t]][y + dy[t]] = cnt;
        pre[qx[r] = x + dx[t]][qy[r] = y + dy[t]] = t;
      }
  }
  id[x1][y1] = w;
  while (~pre[x1][y1]) {
    int t = pre[x1][y1];
    walk(x1, y1, x1 - dx[t], y1 - dy[t]);
    x1 -= dx[t], y1 -= dy[t];
  }
}
bool use[N];
int main() {
  int n, m, i, j, t;
  gi(n), gi(m);
  if (n == 1) return print(0), 0;
  for (i = 1; i <= m; i++) gi(x[i]), gi(y[i]), id[x[i]][y[i]] = i;
  for (i = 1; i <= m; i++) gi(tx[i]), gi(ty[i]);
  for (i = 0; i <= n + 1; i++)
    for (j = 0; j <= n + 1; j++)
      if (!i || !j || i == n + 1 || j == n + 1) id[i][j] = -1;
  if (n == 2) {
    if (m == 1)
      move(x[1], y[1], tx[1], ty[1]);
    else if (m == 2) {
      if (id[tx[1]][ty[1]] == 2) {
        for (i = 1; i <= n; i++)
          for (j = 1; j <= n; j++)
            if (!id[i][j]) {
              move(x[2], y[2], i, j);
              x[2] = i, y[2] = j;
              goto zzz;
            }
      zzz:;
      }
      move(x[1], y[1], tx[1], ty[1]);
      move(x[2], y[2], tx[2], ty[2]);
    }
  } else {
    for (t = 1; t <= m; t++) {
      for (i = 1; i <= n; i++) {
        if (i > 1)
          for (j = t; j; j--)
            if (id[i][j]) {
              while (j < t) walk(i, j, i, j + 1), j++;
              while (i > 1) walk(i, j, i - 1, j), i--;
              goto over;
            }
        for (j = t; j <= n; j++)
          if (id[i][j]) {
            while (t < j) walk(i, j, i, j - 1), j--;
            while (i > 1) walk(i, j, i - 1, j), i--;
            goto over;
          }
      }
    over:;
    }
    for (i = 1; i <= m; i++) sa[i] = i;
    sort(sa + 1, sa + 1 + m, [&](int a, int b) {
      return tx[a] == tx[b] ? ty[a] < ty[b] : tx[a] > tx[b];
    });
    for (i = 1; i <= m; i++) rk[sa[i]] = i;
    for (i = 1; i <= m; i++) move(1, i, 3, rk[id[1][i]]);
    for (i = 1; i <= m; i++) move(3, i, 1, i);
    for (i = 1; i <= m; i++)
      if (tx[id[1][i]] > 2)
        move(1, i, tx[id[1][i]], ty[id[1][i]]);
      else
        break;
    for (i = 1; i <= m; i++)
      if (tx[id[1][i]] == 2) walk(1, i, 2, i);
    for (t = 1; t <= 2; t++)
      for (i = 1; i <= n; i++) {
        while (id[t][i] && ty[id[t][i]] < i) walk(t, i, t, i - 1), i--;
        while (ty[id[t][i]] > i) {
          for (j = i; id[t][j]; j++)
            ;
          while (j > i) walk(t, j - 1, t, j), j--;
          i++;
        }
      }
    for (i = 1; i <= n; i++)
      for (j = 1; j <= n; j++)
        if (id[i][j] && (tx[id[i][j]] != i || ty[id[i][j]] != j)) assert(0);
  }
  print(ans.size());
  putc('\n');
  for (auto pr : ans) {
    print(pr.first.first);
    putc(' ');
    print(pr.first.second);
    putc(' ');
    print(pr.second.first);
    putc(' ');
    print(pr.second.second);
    putc('\n');
  }
  return 0;
}
