#include <bits/stdc++.h>
using namespace std;
const int MAX_N = 50;
const int MAX_M = 50;
struct Move {
  int x0, y0, x1, y1;
  Move() {}
  Move(int _x0, int _y0, int _x1, int _y1)
      : x0(_x0), y0(_y0), x1(_x1), y1(_y1) {}
  Move &reverse() {
    swap(x0, x1), swap(y0, y1);
    return *this;
  }
  int len() { return abs(x1 - x0) + abs(y1 - y0); }
  void print() {
    int dx = (x1 > x0) ? 1 : (x1 < x0) ? -1 : 0;
    int dy = (y1 > y0) ? 1 : (y1 < y0) ? -1 : 0;
    for (int x = x0, y = y0; x != x1 || y != y1; x += dx, y += dy)
      printf("%d %d %d %d\n", x + 1, y + 1, x + dx + 1, y + dy + 1);
  }
};
int sxs[MAX_M], sys[MAX_M], gxs[MAX_M], gys[MAX_M];
int xs[MAX_M], ys[MAX_M], ps[MAX_M];
bool fs[MAX_N][MAX_N];
bool cmpx(const int &a, const int &b) { return xs[a] < xs[b]; }
bool cmpy(const int &a, const int &b) { return ys[a] < ys[b]; }
void printpos(int m, int vxs[], int vys[]) {
  for (int i = 0; i < m; i++) printf("(%d,%d) ", vxs[i], vys[i]);
  putchar('\n');
}
bool mvclear(Move &mv) {
  int dx = (mv.x1 > mv.x0) ? 1 : (mv.x1 < mv.x0) ? -1 : 0;
  int dy = (mv.y1 > mv.y0) ? 1 : (mv.y1 < mv.y0) ? -1 : 0;
  for (int x = mv.x0, y = mv.y0; x != mv.x1 || y != mv.y1;) {
    x += dx, y += dy;
    if (fs[y][x]) return false;
  }
  return true;
}
void align(int m, int vxs[], int vys[], vector<Move> &vs) {
  for (int i = 0; i < m; i++) ps[i] = i;
  memcpy(xs, vxs, sizeof(xs));
  memcpy(ys, vys, sizeof(ys));
  memset(fs, false, sizeof(fs));
  for (int i = 0; i < m; i++) fs[ys[i]][xs[i]] = true;
  sort(ps, ps + m, cmpx);
  queue<pair<int, Move> > q;
  for (int i = 0; i < m; i++) {
    int j = ps[i];
    if (xs[j] != i) q.push(pair<int, Move>(j, Move(xs[j], ys[j], i, ys[j])));
  }
  while (!q.empty()) {
    pair<int, Move> u = q.front();
    q.pop();
    int i = u.first;
    Move &mv = u.second;
    if (mvclear(mv)) {
      fs[mv.y0][mv.x0] = false;
      fs[mv.y1][mv.x1] = true;
      ys[i] = mv.y1, xs[i] = mv.x1;
      vs.push_back(mv);
    } else
      q.push(u);
  }
  for (int i = 0; i < m; i++)
    if (ys[i] != i) {
      vs.push_back(Move(xs[i], ys[i], xs[i], i));
      ys[i] = i;
    }
  for (int i = 0; i < m; i++)
    if (xs[i] != i) {
      vs.push_back(Move(xs[i], ys[i], i, ys[i]));
      xs[i] = i;
    }
}
int main() {
  int n, m;
  scanf("%d%d", &n, &m);
  for (int i = 0; i < m; i++)
    scanf("%d%d", sxs + i, sys + i), sxs[i]--, sys[i]--;
  for (int i = 0; i < m; i++)
    scanf("%d%d", gxs + i, gys + i), gxs[i]--, gys[i]--;
  vector<Move> svs, gvs;
  align(m, sxs, sys, svs);
  align(m, gxs, gys, gvs);
  for (int i = gvs.size() - 1; i >= 0; i--) svs.push_back(gvs[i].reverse());
  int k = 0;
  for (auto mv : svs) k += mv.len();
  printf("%d\n", k);
  for (int i = 0; i < svs.size(); i++) svs[i].print();
  return 0;
}
