#include <bits/stdc++.h>
using namespace std;
vector<pair<int, int>> allstarts;
vector<pair<int, int>> allends;
struct cube {
  int x;
  int y;
  int gx;
  int gy;
  cube(int xx, int yy, int goalxx, int goalyy) {
    x = xx;
    y = yy;
    gx = goalxx;
    gy = goalyy;
  }
  bool move(int nx, int ny, vector<vector<cube *>> &array) {
    if (array[ny - 1][nx - 1] != NULL) {
      printf("ERROR: tried to go to (%d, %d)\n", nx, ny);
      return false;
    }
    allstarts.push_back(make_pair(x, y));
    allends.push_back(make_pair(nx, ny));
    array[y - 1][x - 1] = NULL;
    x = nx;
    y = ny;
    array[y - 1][x - 1] = this;
    return true;
  }
  void print() { printf("cube at (%d, %d) to (%d, %d)\n", x, y, gx, gy); }
  void movemore(int nx, int ny, vector<vector<cube *>> &array) {
    if (x < nx) {
      for (int i = x + 1; i <= nx; i++) {
        move(i, y, array);
      }
    } else {
      for (int i = x - 1; i >= nx; i--) {
        move(i, y, array);
      }
    }
    if (y < ny) {
      for (int i = y + 1; i <= ny; i++) {
        move(x, i, array);
      }
    } else {
      for (int i = y - 1; i >= ny; i--) {
        move(x, i, array);
      }
    }
  }
};
void add(vector<vector<int>> out, int x, int y, int nx, int ny) {
  vector<int> v = {x, y, nx, ny};
  out.push_back(v);
}
struct sorta {
  bool operator()(cube *i, cube *j) {
    return (i->y < j->y || (i->y == j->y && i->x < j->x));
  }
} sort1;
bool sortf(cube *c1, cube *c2) {
  return (c1->y < c2->y || (c1->y == c2->y && c1->x < c2->x));
}
struct sortb {
  bool operator()(cube *i, cube *j) {
    return (i->gy < j->gy || (i->gy == j->gy && i->gx < j->gx));
  }
} sort2;
struct sortc {
  bool operator()(cube *i, cube *j) {
    return (i->gy > j->gy || (i->gy == j->gy && i->gx > j->gx));
  }
} sort3;
struct sortd {
  bool operator()(cube *i, cube *j) {
    return (i->gy < j->gy || (i->gy == j->gy && i->gx > j->gx));
  }
} sort4;
int main() {
  int n, m, x, y;
  scanf("%d %d", &n, &m);
  vector<vector<int>> out;
  vector<vector<cube *>> array(n, vector<cube *>(n, NULL));
  vector<cube *> cubes(m, NULL);
  unordered_set<int> s;
  for (int i = 0; i < n; i++) {
    s.insert(i + 1);
  }
  for (int i = 0; i < m; i++) {
    scanf("%d %d", &x, &y);
    cubes[i] = new cube(x, y, 0, 0);
    array[y - 1][x - 1] = cubes[i];
  }
  for (int i = 0; i < m; i++) {
    scanf("%d %d", &x, &y);
    cubes[i]->gx = x;
    cubes[i]->gy = y;
    s.erase(y);
  }
  if (m == 1 && n == 1) {
    cout << 0 << endl;
    return 0;
  }
  int t = 1;
  if (s.size() > 0) {
    t = *s.begin();
  }
  sort(cubes.begin(), cubes.end(), sort1);
  vector<int> less, minus1, tt, plus1, more;
  for (int i = 0; i < cubes.size(); i++) {
    cube *c = cubes[i];
    if (c->y < t - 1) {
      less.push_back(i);
    } else if (c->y == t - 1) {
      minus1.push_back(i);
    } else if (c->y == t) {
      tt.push_back(i);
    } else if (c->y == t + 1) {
      plus1.push_back(i);
    } else {
      more.push_back(i);
    }
  }
  int count1 = 0;
  int count2 = 0;
  int count = 0;
  int countt = n;
  for (int i = tt.size() - 1; i >= 0; i--) {
    cubes[tt[i]]->movemore(countt, t, array);
    countt--;
  }
  for (int ind : minus1) {
    cubes[ind]->movemore(count1 + 1, t - 1, array);
    cubes[ind]->movemore(count1 + 1, t, array);
    count1++;
    count++;
  }
  for (int ind : plus1) {
    cubes[ind]->movemore(count2 + 1, t + 1, array);
    count2++;
  }
  for (int i = plus1.size() - 1; i >= 0; i--) {
    cubes[plus1[i]]->movemore(max(count + 1, cubes[plus1[i]]->x), t + 1, array);
    cubes[plus1[i]]->movemore(cubes[plus1[i]]->x, t, array);
    cubes[plus1[i]]->movemore(count + 1, t, array);
    count++;
  }
  for (int ii = less.size() - 1; ii >= 0; ii--) {
    int i = less[ii];
    cubes[i]->movemore(cubes[i]->x, t - 1, array);
    cubes[i]->movemore(countt, t - 1, array);
    cubes[i]->movemore(countt, t, array);
    countt--;
  }
  for (int i : more) {
    cubes[i]->movemore(cubes[i]->x, t + 1, array);
    cubes[i]->movemore(count + 1, t + 1, array);
    cubes[i]->movemore(count + 1, t, array);
    count++;
  }
  if (s.size() == 0) {
    sort(cubes.begin(), cubes.end(), sort3);
    for (cube *c : cubes) {
      c->movemore(c->x, c->gy, array);
      c->movemore(c->gx, c->gy, array);
    }
  } else {
    sort(cubes.begin(), cubes.end(), sort2);
    vector<int> g1, g2, g3, g4;
    for (int i = 0; i < cubes.size(); i++) {
      if (cubes[i]->gy < t - 1) {
        g1.push_back(i);
      } else if (cubes[i]->gy == t - 1) {
        g2.push_back(i);
      } else if (cubes[i]->gy == t + 1) {
        g3.push_back(i);
      } else {
        g4.push_back(i);
      }
    }
    for (int i : g1) {
      cubes[i]->movemore(cubes[i]->x, t - 1, array);
      cubes[i]->movemore(cubes[i]->gx, t - 1, array);
      cubes[i]->movemore(cubes[i]->gx, cubes[i]->gy, array);
    }
    for (int ii = g4.size() - 1; ii >= 0; ii--) {
      int i = g4[ii];
      cubes[i]->movemore(cubes[i]->x, t + 1, array);
      cubes[i]->movemore(cubes[i]->gx, t + 1, array);
      cubes[i]->movemore(cubes[i]->gx, cubes[i]->gy, array);
    }
    int ncount1 = 0;
    int ncount2 = n;
    for (int i : g2) {
      cube *c = cubes[i];
      c->movemore(c->x, c->y - 1, array);
      for (int j = c->x - 1; j > ncount1; j--) {
        if (array[t - 1][j - 1] != NULL) {
          array[t - 1][j - 1]->move(j + 1, t, array);
        }
      }
      c->movemore(ncount1 + 1, c->y, array);
      c->move(ncount1 + 1, t, array);
      ncount1++;
    }
    for (int ii = g3.size() - 1; ii >= 0; ii--) {
      int i = g3[ii];
      cube *c = cubes[i];
      c->movemore(c->x, c->y + 1, array);
      for (int j = c->x + 1; j <= ncount2; j++) {
        if (array[t - 1][j - 1] != NULL) {
          array[t - 1][j - 1]->move(j - 1, t, array);
        }
      }
      c->movemore(ncount2, c->y, array);
      c->movemore(ncount2, t, array);
      ncount2--;
    }
    for (int i = 0; i < n; i++) {
      cube *c = array[t - 1][i];
      if (c != NULL) {
        if (c->gy == t - 1) {
          c->movemore(c->x, t - 1, array);
        } else {
          c->movemore(c->x, t + 1, array);
        }
      }
    }
    if (t > 1) {
      for (int i = n - 1; i >= 0; i--) {
        cube *c = array[t - 2][i];
        if (c != NULL) {
          c->movemore(c->gx, t - 1, array);
        }
      }
    }
    if (t < n) {
      for (int i = 0; i < n; i++) {
        cube *c = array[t][i];
        if (c != NULL) {
          c->movemore(c->gx, t + 1, array);
        }
      }
    }
  }
  printf("%d\n", allstarts.size());
  for (int i = 0; i < allstarts.size(); i++) {
    printf("%d %d %d %d\n", allstarts[i].first, allstarts[i].second,
           allends[i].first, allends[i].second);
  }
  return 0;
}
