#include <bits/stdc++.h>
using namespace std;
long long lgput(long long a, long long b, long long mod) {
  long long ret = 1;
  while (b) {
    if (b & 1) ret = (ret * a) % mod;
    a = (a * a) % mod;
    b >>= 1;
  }
  return ret;
}
const long long MOD = 998244353;
struct piesa {
  int x, y, actualIndex;
  piesa(int _x = 0, int _y = 0, int _actualIndex = 0)
      : x(_x), y(_y), actualIndex(_actualIndex) {}
};
using moves = pair<pair<int, int>, pair<int, int> >;
bool occupied[55][55];
void movX(int &x1, int &x2, int &y, vector<moves> &sol) {
  occupied[x1][y] = false;
  occupied[x2][y] = true;
  while (x1 < x2) {
    sol.push_back({{x1, y}, {++x1, y}});
  }
  while (x1 > x2) {
    sol.push_back({{x1, y}, {--x1, y}});
  }
}
void movY(int &y1, int &y2, int &x, vector<moves> &sol) {
  occupied[x][y1] = false;
  occupied[x][y2] = true;
  while (y1 < y2) {
    sol.push_back({{x, y1}, {x, ++y1}});
  }
  while (y1 > y2) {
    sol.push_back({{x, y1}, {x, --y1}});
  }
}
bool canMoveX(int x1, int x2, int y) {
  for (int i = min(x1, x2); i <= max(x1, x2); ++i) {
    if (i == x1) continue;
    if (occupied[i][y]) return false;
  }
  return true;
}
bool canMoveY(int y1, int y2, int x) {
  for (int i = min(y1, y2); i <= max(y1, y2); ++i) {
    if (i == y1) continue;
    if (occupied[x][i]) return false;
  }
  return true;
}
vector<moves> getSequence(int pieceCount, vector<piesa> &positions) {
  vector<moves> solution;
  sort(positions.begin(), positions.end(),
       [&](const piesa &a, const piesa &b) -> bool { return a.x < b.x; });
  bool ok = true;
  while (ok) {
    ok = false;
    for (int i = pieceCount; i > 0; --i) {
      if (positions[i - 1].x == i) continue;
      if (canMoveX(positions[i - 1].x, i, positions[i - 1].y)) {
        movX(positions[i - 1].x, i, positions[i - 1].y, solution);
        ok = true;
      }
    }
  }
  for (int i = 1; i <= pieceCount; ++i) {
    movY(positions[i - 1].y, positions[i - 1].actualIndex, positions[i - 1].x,
         solution);
  }
  for (int i = 1; i <= pieceCount; ++i) {
    movX(positions[i - 1].x, positions[i - 1].actualIndex,
         positions[i - 1].actualIndex, solution);
  }
  return solution;
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  int n, m;
  cin >> n >> m;
  vector<piesa> initialPositions(m);
  for (int i = 0; i < m; ++i) {
    cin >> initialPositions[i].x >> initialPositions[i].y;
    occupied[initialPositions[i].x][initialPositions[i].y] = true;
    initialPositions[i].actualIndex = i + 1;
  }
  vector<piesa> targetPositions(m);
  for (int i = 0; i < m; ++i) {
    cin >> targetPositions[i].x >> targetPositions[i].y;
    targetPositions[i].actualIndex = i + 1;
  }
  vector<moves> firstSeq = getSequence(m, initialPositions);
  memset(occupied, false, sizeof occupied);
  for (int i = 0; i < m; ++i) {
    occupied[targetPositions[i].x][targetPositions[i].y] = true;
  }
  vector<moves> secondSeq = getSequence(m, targetPositions);
  reverse(secondSeq.begin(), secondSeq.end());
  cout << firstSeq.size() + secondSeq.size() << '\n';
  for (auto &x : firstSeq) {
    cout << x.first.first << ' ' << x.first.second << ' ' << x.second.first
         << ' ' << x.second.second << '\n';
  }
  for (auto &x : secondSeq) {
    cout << x.second.first << ' ' << x.second.second << ' ' << x.first.first
         << ' ' << x.first.second << '\n';
  }
  return 0;
}
