![]()
![]()
/*
爆搜,正解弃坑
*/
#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<algorithm>
#include<vector>
#include<queue>
#include<stack>
using namespace std;
const int maxn = 20;
int n,m,x1[maxn],y1[maxn],x2[maxn],y2[maxn],vis[maxn][maxn],p[maxn][maxn],l[maxn];
bool dfs(int col,int stp,int y,int x){
if(y == y2[col] && x == x2[col]){
l[col] = stp;
if(col == m){
int tmpl = 0;
for(int i = 1;i <= m;i++) tmpl += l[i];
if(tmpl == n*n) return true;
else return false;
}
return dfs(col+1,1,y1[col+1],x1[col+1]);
}
vis[y][x] = col;
int ty,tx;
for(int i = 2;i <= 8;i+=2){
if(i == 2){
ty = y - 1;
tx = x;
}else if(i == 4){
ty = y;
tx = x - 1;
}else if(i == 6){
ty = y;
tx = x + 1;
}else{
ty = y + 1;
tx = x;
}
if(ty < 1 || ty > n || tx < 1 || tx > n || (vis[ty][tx] && (ty != y2[col] || tx != x2[col]))) continue;
p[y][x] = i;
if(dfs(col,stp+1,ty,tx)) return true;
}
if(y != y1[col] || x != x1[col])vis[y][x] = 0;
return false;
}
int main(){
freopen("jian.in","r",stdin);
freopen("jian.out","w",stdout);
cin>>n>>m;
for(int i = 1;i <= m;i++){
cin>>x1[i]>>y1[i]>>x2[i]>>y2[i];
vis[y1[i]][x1[i]] = vis[y2[i]][x2[i]] = i;
}
dfs(1,1,y1[1],x1[1]);
int nowy,nowx;
for(int i = 1;i <= m;i++){
cout<<l[i]<<endl;
nowy = y1[i];
nowx = x1[i];
for(int j = 1;j <= l[i];j++){
cout<<nowx<<" "<<nowy<<endl;
if(p[nowy][nowx] == 2) nowy--;
else if(p[nowy][nowx] == 4) nowx--;
else if(p[nowy][nowx] == 6) nowx++;
else if(p[nowy][nowx] == 8) nowy++;
}
}
return 0;
}