#include <bits/stdc++.h>
#pragma GCC optimize("Ofast", "unroll-loops")
using namespace std;
const long long inf = numeric_limits<long long>::max() / 2;
const long double eps = 1e-9;
const long double pi = acos(-1);
inline void solve(), read();
int main() {
  ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);
  read();
  solve();
  return 0;
}
struct query {
  long long x1, y1, x2, y2;
};
long long n, m;
vector<vector<long long> > a, b;
vector<pair<long long, long long> > sp, fp;
vector<long long> ind;
inline void move(vector<pair<long long, long long> >& p, vector<query>& ans,
                 vector<vector<long long> >& a) {
  ind.assign(m + 1, 0);
  iota((ind).begin(), (ind).end(), 0);
  sort(ind.begin() + 1, ind.end(), [p](long long i, long long j) {
    if (p[i] == p[j]) return i < j;
    return p[i] < p[j];
  });
  long long good = 0;
  while (!good) {
    good = 1;
    for (long long j = 1; j <= m; j++) {
      long long i = ind[j];
      if (p[i].first == j) {
        continue;
      }
      good = 0;
      long long x = p[i].first, y = p[i].second;
      long long k = x;
      long long ok = 1;
      while (k + 1 <= j) {
        ++k;
        if (a[k][y]) {
          ok = 0;
          break;
        }
      }
      while (k - 1 >= j) {
        --k;
        if (a[k][y]) {
          ok = 0;
          break;
        }
      }
      if (!ok) {
        continue;
      }
      k = x;
      while (k + 1 <= j) {
        ++k;
        ans.push_back({k - 1, y, k, y});
      }
      while (k - 1 >= j) {
        --k;
        ans.push_back({k + 1, y, k, y});
      }
      a[x][y] = 0;
      a[j][y] = 1;
      p[i] = {j, y};
    }
  }
  for (long long j = 1; j <= m; j++) {
    long long i = ind[j];
    while (p[i].second + 1 <= i) {
      ++p[i].second;
      ans.push_back({p[i].first, p[i].second - 1, p[i].first, p[i].second});
    }
    while (p[i].second - 1 >= i) {
      --p[i].second;
      ans.push_back({p[i].first, p[i].second + 1, p[i].first, p[i].second});
    }
  }
  for (long long j = 1; j <= m; j++) {
    long long i = ind[j];
    while (p[i].first + 1 <= i) {
      ++p[i].first;
      ans.push_back({p[i].first - 1, p[i].second, p[i].first, p[i].second});
    }
    while (p[i].first - 1 >= i) {
      --p[i].first;
      ans.push_back({p[i].first + 1, p[i].second, p[i].first, p[i].second});
    }
  }
}
inline void solve() {
  vector<query> from, to;
  move(sp, from, a);
  move(fp, to, b);
  reverse((to).begin(), (to).end());
  cout << (long long)((from).size()) + (long long)((to).size()) << "\n";
  for (query q : from) {
    cout << q.x1 << " " << q.y1 << " " << q.x2 << " " << q.y2 << "\n";
  }
  for (query q : to) {
    cout << q.x2 << " " << q.y2 << " " << q.x1 << " " << q.y1 << "\n";
  }
}
inline void read() {
  cin >> n >> m;
  a.assign(n + 1, vector<long long>(n + 1, 0));
  b.assign(n + 1, vector<long long>(n + 1, 0));
  sp.resize(m + 1);
  fp.resize(m + 1);
  for (long long i = 1; i <= m; i++) {
    cin >> sp[i].first >> sp[i].second;
    a[sp[i].first][sp[i].second] = 1;
  }
  for (long long i = 1; i <= m; i++) {
    cin >> fp[i].first >> fp[i].second;
    b[fp[i].first][fp[i].second] = 1;
  }
}
