#include <bits/stdc++.h>
using namespace std;
int n, m;
int a[51][51];
int b[51][51];
int dx[] = {0, 1, 0, -1};
int dy[] = {1, 0, -1, 0};
int curx[51], cury[51];
int posx[51], posy[51];
char placed[51];
int d[51][51];
pair<int, int> p[51][51];
vector<pair<pair<int, int>, pair<int, int> > > an;
int col = -1;
bool in(int i, int j) { return i >= 1 && i <= n && j >= 1 && j <= n; }
bool can(int v, int gox, int goy) {
  memset(d, -1, sizeof(d));
  d[curx[v]][cury[v]] = 0;
  queue<pair<int, int> > q;
  q.push(make_pair(curx[v], cury[v]));
  while (!q.empty()) {
    pair<int, int> v = q.front();
    q.pop();
    for (int k = 0; k < 4; k++) {
      int i = v.first + dx[k];
      int j = v.second + dy[k];
      if (in(i, j) && d[i][j] == -1 && a[i][j] == 0) {
        q.push(make_pair(i, j));
        d[i][j] = d[v.first][v.second] + 1;
        p[i][j] = v;
      }
    }
  }
  if (d[gox][goy] != -1) {
    vector<pair<int, int> > path;
    for (auto u = make_pair(gox, goy); u != make_pair(curx[v], cury[v]);
         u = p[u.first][u.second]) {
      path.push_back(u);
    }
    path.push_back(make_pair(curx[v], cury[v]));
    a[curx[v]][cury[v]] = 0;
    a[gox][goy] = 1;
    curx[v] = gox;
    cury[v] = goy;
    reverse(path.begin(), path.end());
    for (int i = 0; i < (int)path.size() - 1; i++) {
      an.push_back(make_pair(path[i], path[i + 1]));
    }
    return true;
  }
  return false;
}
bool cmp(const int &lhs, const int &rhs) {
  if (posy[lhs] <= col && posy[rhs] > col) return true;
  if (posy[lhs] > col && posy[rhs] <= col) return false;
  if (posy[lhs] <= col && posy[rhs] <= col) {
    if (posy[lhs] != posy[rhs]) return posy[lhs] < posy[rhs];
    return posx[lhs] < posx[rhs];
  } else {
    if (posy[lhs] != posy[rhs]) return posy[lhs] > posy[rhs];
    return posx[lhs] < posx[rhs];
  }
  assert(false);
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 1; i <= m; i++) {
    int x, y;
    scanf("%d%d", &x, &y);
    curx[i] = x;
    cury[i] = y;
    a[x][y] = 1;
  }
  for (int i = 1; i <= m; i++) {
    int x, y;
    scanf("%d%d", &x, &y);
    posx[i] = x;
    posy[i] = y;
    b[x][y] = 1;
  }
  for (int j = 1; j <= n; j++) {
    bool ok = true;
    for (int i = 1; i <= n; i++) {
      if (b[i][j]) ok = false;
    }
    if (ok) {
      col = j;
      break;
    }
  }
  if (col == -1) {
    col = n;
  }
  for (int i = 1; i <= m; i++) {
    for (int j = 1; j <= m; j++) {
      if (!placed[j]) {
        if (can(j, i, col)) {
          placed[j] = true;
          break;
        }
      }
    }
  }
  memset(placed, 0, sizeof(placed));
  vector<int> order;
  for (int j = 1; j <= m; j++) order.push_back(j);
  sort(order.begin(), order.end(), cmp);
  while (true) {
    bool ok = false;
    for (int v : order) {
      if (!placed[v]) {
        if (can(v, posx[v], posy[v])) {
          placed[v] = true;
          ok = true;
        }
      }
    }
    if (!ok) break;
  }
  printf("%d\n", an.size());
  for (auto u : an)
    printf("%d %d %d %d\n", u.first.first, u.first.second, u.second.first,
           u.second.second);
  return 0;
}
