#include <bits/stdc++.h>
using namespace std;
const int maxn = 55;
struct Point {
  int x, y, id;
} F[maxn], T[maxn];
inline bool operator<(Point a, Point b) { return a.x < b.x; }
inline bool cmp_x(Point a, Point b) { return a.x < b.x; }
inline bool cmp_y(Point a, Point b) { return a.y < b.y; }
vector<pair<Point, Point> > Ans;
stack<pair<Point, Point> > Tmpans;
int n, m;
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 1; i <= m; ++i) {
    scanf("%d%d", &F[i].x, &F[i].y);
    F[i].id = i;
  }
  for (int i = 1; i <= m; ++i) {
    scanf("%d%d", &T[i].x, &T[i].y);
    T[i].id = i;
  }
  sort(F + 1, F + m + 1, cmp_x);
  for (int i = m; i; --i) {
    while (F[i].x < i) {
      pair<Point, Point> tmp;
      tmp.first = F[i];
      F[i].x++;
      tmp.second = F[i];
      Ans.push_back(tmp);
    }
  }
  for (int i = 1; i <= m; ++i) {
    while (F[i].x != i) {
      pair<Point, Point> tmp;
      tmp.first = F[i];
      if (F[i].x > i)
        F[i].x--;
      else
        F[i].x++;
      tmp.second = F[i];
      Ans.push_back(tmp);
    }
  }
  for (int i = 1; i <= m; ++i) {
    while (F[i].y != i) {
      pair<Point, Point> tmp;
      tmp.first = F[i];
      if (F[i].y > i)
        F[i].y--;
      else
        F[i].y++;
      tmp.second = F[i];
      Ans.push_back(tmp);
    }
  }
  for (int i = 1; i <= m; ++i) {
    while (F[i].x != F[i].id) {
      pair<Point, Point> tmp;
      tmp.first = F[i];
      if (F[i].x > F[i].id)
        F[i].x--;
      else
        F[i].x++;
      tmp.second = F[i];
      Ans.push_back(tmp);
    }
  }
  for (int i = 1; i <= m; ++i) {
    while (F[i].y != F[i].id) {
      pair<Point, Point> tmp;
      tmp.first = F[i];
      if (F[i].y > F[i].id)
        F[i].y--;
      else
        F[i].y++;
      tmp.second = F[i];
      Ans.push_back(tmp);
    }
  }
  sort(T + 1, T + m + 1, cmp_x);
  for (int i = m; i; --i) {
    while (T[i].x < i) {
      pair<Point, Point> tmp;
      tmp.second = T[i];
      T[i].x++;
      tmp.first = T[i];
      Tmpans.push(tmp);
    }
  }
  for (int i = 1; i <= m; ++i) {
    while (T[i].x != i) {
      pair<Point, Point> tmp;
      tmp.second = T[i];
      if (T[i].x > i)
        T[i].x--;
      else
        T[i].x++;
      tmp.first = T[i];
      Tmpans.push(tmp);
    }
  }
  for (int i = 1; i <= m; ++i) {
    while (T[i].y != i) {
      pair<Point, Point> tmp;
      tmp.second = T[i];
      if (T[i].y > i)
        T[i].y--;
      else
        T[i].y++;
      tmp.first = T[i];
      Tmpans.push(tmp);
    }
  }
  for (int i = 1; i <= m; ++i) {
    while (T[i].x != T[i].id) {
      pair<Point, Point> tmp;
      tmp.second = T[i];
      if (T[i].x > T[i].id)
        T[i].x--;
      else
        T[i].x++;
      tmp.first = T[i];
      Tmpans.push(tmp);
    }
  }
  for (int i = 1; i <= m; ++i) {
    while (T[i].y != T[i].id) {
      pair<Point, Point> tmp;
      tmp.second = T[i];
      if (T[i].y > T[i].id)
        T[i].y--;
      else
        T[i].y++;
      tmp.first = T[i];
      Tmpans.push(tmp);
    }
  }
  while (!Tmpans.empty()) {
    Ans.push_back(Tmpans.top());
    Tmpans.pop();
  }
  printf("%d\n", (int)Ans.size());
  for (unsigned i = 0; i < Ans.size(); ++i)
    printf("%d %d %d %d\n", Ans[i].first.x, Ans[i].first.y, Ans[i].second.x,
           Ans[i].second.y);
  return 0;
}
