#include <bits/stdc++.h>
using namespace std;
const int N = 50 + 10;
int n, k, mrow, ar[N][N], des[N][N];
pair<int, int> dest[N];
struct cord {
  int x, y;
  cord() { x = y = 0; }
  cord(int a, int b) {
    x = a;
    y = b;
  }
} cor[N];
struct _move {
  int x1, y1, x2, y2;
  _move() { x1 = y1 = x2 = y2 = 0; }
  _move(int a, int b, int c, int d) {
    x1 = a;
    y1 = b;
    x2 = c;
    y2 = d;
  }
};
vector<_move> ans;
bool is_val(int x, int y) {
  return x >= 0 && x < n && y >= 0 && y < n && ar[x][y] == -1;
}
bool L(int indx) {
  if (indx == -1) return 0;
  int x = cor[indx].x, y = cor[indx].y - 1;
  if (!is_val(x, y)) return 0;
  ans.push_back(_move(x, y + 1, x, y));
  swap(ar[x][y], ar[x][y + 1]);
  cor[indx] = cord(x, y);
  return 1;
}
bool R(int indx) {
  if (indx == -1) return 0;
  int x = cor[indx].x, y = cor[indx].y + 1;
  if (!is_val(x, y)) return 0;
  ans.push_back(_move(x, y - 1, x, y));
  swap(ar[x][y], ar[x][y - 1]);
  cor[indx] = cord(x, y);
  return 1;
}
bool U(int indx) {
  if (indx == -1) return 0;
  int x = cor[indx].x - 1, y = cor[indx].y;
  if (!is_val(x, y)) return 0;
  ans.push_back(_move(x + 1, y, x, y));
  swap(ar[x][y], ar[x + 1][y]);
  cor[indx] = cord(x, y);
  return 1;
}
bool D(int indx) {
  if (indx == -1) return 0;
  int x = cor[indx].x + 1, y = cor[indx].y;
  if (!is_val(x, y)) return 0;
  ans.push_back(_move(x - 1, y, x, y));
  swap(ar[x][y], ar[x - 1][y]);
  cor[indx] = cord(x, y);
  return 1;
}
bool one_row(int indx) {
  int x = cor[indx].x, y = cor[indx].y, x2 = dest[indx].first,
      y2 = dest[indx].second;
  return x == x2;
}
bool one_col(int indx) {
  int x = cor[indx].x, y = cor[indx].y, x2 = dest[indx].first,
      y2 = dest[indx].second;
  return y == y2;
}
void relax() {
  for (int j = 0; j < n; j++) {
    int indx = ar[mrow][j];
    while (L(indx))
      ;
  }
}
int main() {
  memset(ar, -1, sizeof ar);
  memset(des, -1, sizeof des);
  cin >> n >> k;
  for (int i = 0; i < k; i++) {
    int x, y;
    cin >> x >> y;
    x--;
    y--;
    ar[x][y] = i;
    cor[i] = cord(x, y);
  }
  for (int i = 0; i < k; i++) {
    int x, y;
    cin >> x >> y;
    x--;
    y--;
    des[x][y] = i;
    dest[i] = {x, y};
  }
  vector<int> vv;
  for (int i = 0; i < n; i++) {
    int cnt = 0;
    for (int j = 0; j < n; j++)
      if (des[i][j] != -1) cnt++;
    if (cnt <= 1) {
      mrow = i;
    }
  }
  for (int i = 0; i < n; i++) {
    int indx = ar[n - 1][i];
    while (L(indx))
      ;
  }
  for (int i = n - 2; i >= 0; i--)
    for (int j = n - 1; j >= 0; j--) {
      int indx = ar[i][j];
      while (R(indx))
        ;
      while (D(indx))
        ;
      while (L(indx))
        ;
    }
  for (int j = 0; j < n; j++)
    for (int i = 0, indx = ar[n - 1][j]; i < n - 1 - mrow; i++) U(indx);
  int tmp = 0;
  for (int i = 0; i < n; i++)
    if (ar[mrow][i] != -1) tmp++;
  assert(tmp == k);
  for (int i = n - 1; i > mrow + 1; i--) {
    for (int j = 0; j < n; j++)
      if (des[i][j] != -1) {
        int indx = des[i][j];
        D(indx);
        while (R(indx))
          ;
        while (!one_row(indx) && D(indx))
          ;
        while (!one_col(indx) && L(indx))
          ;
        assert(one_col(indx) && one_row(indx));
      }
  }
  for (int i = 0; i < mrow - 1; i++) {
    for (int j = 0; j < n; j++)
      if (des[i][j] != -1) {
        int indx = des[i][j];
        U(indx);
        while (R(indx))
          ;
        while (!one_row(indx) && U(indx))
          ;
        while (!one_col(indx) && L(indx))
          ;
        assert(one_col(indx) && one_row(indx));
      }
  }
  relax();
  if (!mrow) {
    for (int i = 0; i < n; i++)
      if (des[mrow][i] != -1) {
        int indx = des[mrow][i];
        D(indx);
        while (R(indx))
          ;
        relax();
        U(indx);
        while (L(indx))
          ;
      }
    relax();
    int d = n - 1;
    while (d >= 0) {
      while (d >= 0 && des[mrow + 1][d] == -1) d--;
      if (d < 0) break;
      int indx = des[mrow + 1][d];
      D(indx);
      if (cor[indx].y < d)
        while (!one_col(indx) && R(indx))
          ;
      else
        while (!one_col(indx) && L(indx))
          ;
      d--;
      relax();
    }
  } else {
    for (int i = 0; i < n; i++)
      if (des[mrow][i] != -1) {
        int indx = des[mrow][i];
        U(indx);
        relax();
        while (R(indx))
          ;
        D(indx);
        while (L(indx))
          ;
      }
    relax();
    int u = n - 1, d = n - 1;
    while (u >= 0 || d >= 0) {
      while (u >= 0 && des[mrow - 1][u] == -1) u--;
      while (d >= 0 && des[mrow + 1][d] == -1) d--;
      if (d < 0 && u < 0) break;
      if (u > d) {
        int indx = des[mrow - 1][u];
        U(indx);
        if (cor[indx].y < u)
          while (!one_col(indx) && R(indx))
            ;
        else
          while (!one_col(indx) && L(indx))
            ;
        u--;
      } else {
        int indx = des[mrow + 1][d];
        D(indx);
        if (cor[indx].y < d)
          while (!one_col(indx) && R(indx))
            ;
        else
          while (!one_col(indx) && L(indx))
            ;
        d--;
      }
      relax();
    }
  }
  for (int j = 0; j < n; j++)
    if (ar[mrow][j] != -1) {
      int indx = ar[mrow][j];
      if (dest[indx].second > j)
        while (!one_col(indx) && R(indx))
          ;
      else
        while (!one_col(indx) && L(indx))
          ;
      if (!one_col(indx)) {
        for (int x = 0; x < n; x++) cout << ar[mrow][x] << ' ';
        cout << endl;
        for (int x = 0; x < n; x++) cout << des[mrow][x] << ' ';
        return 0;
      }
    }
  for (int i = 0; i < n; i++)
    for (int j = 0; j < n; j++) {
      int indx = des[i][j];
    }
  cout << ans.size() << '\n';
  for (int i = 0; i < ans.size(); i++) {
    _move m = ans[i];
    cout << m.x1 + 1 << ' ' << m.y1 + 1 << ' ' << m.x2 + 1 << ' ' << m.y2 + 1
         << '\n';
  }
}
