#include <bits/stdc++.h>
using namespace std;
const int maxn = 505;
struct node {
  int x, y, id;
  int x1, y1;
} c[maxn], mp[11005];
int X[maxn], Y[maxn];
int n, m, len, H;
bool cmp(const node &a, const node &b) {
  if (a.y != b.y) return a.y < b.y;
  return a.x < b.x;
}
void Move(node &e, int l, int r) {
  while (e.x > l)
    mp[len].x = e.x, mp[len].y = e.y, e.x--, mp[len].x1 = e.x,
    mp[len++].y1 = e.y;
  while (e.x < l)
    mp[len].x = e.x, mp[len].y = e.y, e.x++, mp[len].x1 = e.x,
    mp[len++].y1 = e.y;
  while (e.y > r)
    mp[len].x = e.x, mp[len].y = e.y, e.y--, mp[len].x1 = e.x,
    mp[len++].y1 = e.y;
  while (e.y < r)
    mp[len].x = e.x, mp[len].y = e.y, e.y++, mp[len].x1 = e.x,
    mp[len++].y1 = e.y;
}
void solve() {
  sort(c + 1, c + m + 1, cmp);
  int dec = 0;
  c[m + 1].y = -1;
  bool vis[55];
  memset(vis, 0, sizeof(vis));
  vis[0] = 1;
  for (int i = 1; i <= m; i++) {
    if (c[i].y != c[i + 1].y) {
      Move(c[i], i, c[i].y), vis[i] = 1;
      int j = i - 1;
      while (!vis[j]) {
        Move(c[j], j, c[j].y);
        vis[j] = 1;
        j--;
      }
    }
    if (c[i].x >= i) {
      Move(c[i], i, c[i].y), vis[i] = 1;
      int j = i - 1;
      while (!vis[j]) {
        Move(c[j], j, c[j].y);
        vis[j] = 1;
        j--;
      }
    }
  }
  for (int i = 1; i <= m; i++) Move(c[i], i, c[i].id);
  for (int i = 1; i <= m; i++) Move(c[i], c[i].id, c[i].id);
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 1; i <= m; i++) scanf("%d%d", &c[i].x, &c[i].y), c[i].id = i;
  solve();
  H = len;
  for (int i = 1; i <= m; i++) scanf("%d%d", &c[i].x, &c[i].y), c[i].id = i;
  solve();
  printf("%d\n", len);
  for (int i = 0; i < H; i++)
    printf("%d %d %d %d\n", mp[i].x, mp[i].y, mp[i].x1, mp[i].y1);
  for (int i = len - 1; i >= H; i--)
    printf("%d %d %d %d\n", mp[i].x1, mp[i].y1, mp[i].x, mp[i].y);
  return 0;
}
