/**
* author: orzvanh14 ( Độc cô cầu đặc )
* created: 18.04.2026 03:56:02
* too lazy to update time
**/
// i wants to take ioi
//binhtinhtutinkhongcaycunhungmotkhikhongcontutinnualatuyetvong
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define nn "\n"
#define pi pair<int, int>
#define ti tuple<int, int, int>
#define fi first
#define se second
#define lb lower_bound
#define ub upper_bound
#define eb emplace_back
#define pb push_back
#define TASK " "
#define ms(a, x) memset(a, x, sizeof(a))
#define all(a) a.begin(), a.end()
#define All(a, n) a + 1, a + 1 + n
#define LOG 19
const int INF = 1e18;
const int N = 1e2 + 5;
const int maxn = 100 + 5;
const int mod = 1e9 + 7;
struct node{
int kc, u;
bool operator<(const node& other) const {
return kc > other.kc;
}
};
struct edge{
int u, v, w;
};
int n, m;
int sz[N][N];
pi par[N][N];
int dx[] = {0, 0 , -1, 1};
int dy[] = {1, -1, 0, 0};
struct kq{
int u1, v1, u2, v2;
};
vector<kq> ans;
void make_sets(int s, int y){
sz[s][y] = 1;
par[s][y] = {s, y};
}
pi get(int a, int A){
if(make_pair(a, A) == par[a][A]) return {a, A};
return par[a][A] = get(par[a][A].fi, par[a][A].se);
}
void union_sets(int a, int A, int b, int B){
auto [ra, rA] = get(a, A);
auto [rb, rB] = get(b, B);
if(ra != rb || rA != rB){
if(sz[ra][rA] < sz[rb][rB]){
// sz[a] > sz[b]
swap(ra, rb);
swap(rA, rB);
}
sz[ra][rA] += sz[rb][rB];
par[rb][rB] = {ra, rA};
}
}
void nhap(){
cin >> m >> n;
for(int i = 0; i <= m; i++){
for(int j = 0; j <= n; j++){
make_sets(i, j);
}
}
int x1, y1, x2, y2;
while(cin >> x1 >> y1 >> x2 >> y2){
union_sets(x1, y1, x2, y2);
}
}
void solve(){
for(int i = 0; i <= m; i++){
for(int j = 0; j <= n; j++){
auto [u, v] = get(i, j);
for(int k = 0; k < 4; k++){
int x = i + dx[k];
int y = j + dy[k];
if(x <= m && y <= n && x >= 0 && y >= 0){
auto [U, V] = get(x, y);
if(u != U || v != V){
union_sets(u, v, x, y);
ans.pb({i, j, x, y});
}
}
}
}
}
cout << ans.size() << nn;
for(int i = 0; i < ans.size(); i++){
cout << ans[i].u1 << " " << ans[i].v1 << " " << ans[i].u2 << " " << ans[i].v2 << nn;
}
}
signed main(){
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
nhap();
solve();
return 0;
}
LyoqCiAqICAgIGF1dGhvcjogIG9yenZhbmgxNCAoIMSQ4buZYyBjw7QgY+G6p3UgxJHhurdjICkKICogICAgY3JlYXRlZDogMTguMDQuMjAyNiAwMzo1NjowMgogKiAgICB0b28gbGF6eSB0byB1cGRhdGUgdGltZQoqKi8KLy8gaSB3YW50cyB0byB0YWtlIGlvaQovL2Jpbmh0aW5odHV0aW5raG9uZ2NheWN1bmh1bmdtb3RraGlraG9uZ2NvbnR1dGlubnVhbGF0dXlldHZvbmcKI2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKI2RlZmluZSBpbnQgbG9uZyBsb25nCiNkZWZpbmUgbm4gIlxuIgojZGVmaW5lIHBpIHBhaXI8aW50LCBpbnQ+CiNkZWZpbmUgdGkgdHVwbGU8aW50LCBpbnQsIGludD4KI2RlZmluZSBmaSBmaXJzdAojZGVmaW5lIHNlIHNlY29uZAojZGVmaW5lIGxiIGxvd2VyX2JvdW5kCiNkZWZpbmUgdWIgdXBwZXJfYm91bmQKI2RlZmluZSBlYiBlbXBsYWNlX2JhY2sKI2RlZmluZSBwYiBwdXNoX2JhY2sKI2RlZmluZSBUQVNLICIgIgoKI2RlZmluZSBtcyhhLCB4KSBtZW1zZXQoYSwgeCwgc2l6ZW9mKGEpKQojZGVmaW5lIGFsbChhKSBhLmJlZ2luKCksIGEuZW5kKCkKI2RlZmluZSBBbGwoYSwgbikgYSArIDEsIGEgKyAxICsgbgoKI2RlZmluZSBMT0cgMTkKCmNvbnN0IGludCBJTkYgPSAxZTE4Owpjb25zdCBpbnQgTiA9IDFlMiArIDU7CmNvbnN0IGludCBtYXhuID0gMTAwICsgNTsKY29uc3QgaW50IG1vZCA9IDFlOSArIDc7CgoKc3RydWN0IG5vZGV7CglpbnQga2MsIHU7Cglib29sIG9wZXJhdG9yPChjb25zdCBub2RlJiBvdGhlcikgY29uc3QgewogICAgICAgIHJldHVybiBrYyA+IG90aGVyLmtjOwogICAgfQp9OwpzdHJ1Y3QgZWRnZXsKCWludCB1LCB2LCB3Owp9OwppbnQgbiwgbTsKaW50IHN6W05dW05dOwpwaSBwYXJbTl1bTl07CmludCBkeFtdID0gezAsIDAgLCAtMSwgMX07CmludCBkeVtdID0gezEsIC0xLCAwLCAwfTsKc3RydWN0IGtxewogICAgaW50IHUxLCB2MSwgdTIsIHYyOwp9Owp2ZWN0b3I8a3E+IGFuczsKdm9pZCBtYWtlX3NldHMoaW50IHMsIGludCB5KXsKICAgIHN6W3NdW3ldID0gMTsKICAgIHBhcltzXVt5XSA9IHtzLCB5fTsKfQpwaSBnZXQoaW50IGEsIGludCBBKXsKICAgIGlmKG1ha2VfcGFpcihhLCBBKSA9PSBwYXJbYV1bQV0pIHJldHVybiB7YSwgQX07CiAgICByZXR1cm4gcGFyW2FdW0FdID0gZ2V0KHBhclthXVtBXS5maSwgcGFyW2FdW0FdLnNlKTsKfQp2b2lkIHVuaW9uX3NldHMoaW50IGEsIGludCBBLCBpbnQgYiwgaW50IEIpewogICAgYXV0byBbcmEsIHJBXSA9IGdldChhLCBBKTsKICAgIGF1dG8gW3JiLCByQl0gPSBnZXQoYiwgQik7CiAgICBpZihyYSAhPSByYiB8fCByQSAhPSByQil7CiAgICAgICAgaWYoc3pbcmFdW3JBXSA8IHN6W3JiXVtyQl0pewogICAgICAgICAgICAvLyBzelthXSA+IHN6W2JdCiAgICAgICAgICAgIHN3YXAocmEsIHJiKTsKICAgICAgICAgICAgc3dhcChyQSwgckIpOwogICAgICAgIH0KICAgICAgICBzeltyYV1bckFdICs9IHN6W3JiXVtyQl07CiAgICAgICAgcGFyW3JiXVtyQl0gPSB7cmEsIHJBfTsKICAgIH0KfQp2b2lkIG5oYXAoKXsKCWNpbiA+PiBtID4+IG47Cglmb3IoaW50IGkgPSAwOyBpIDw9IG07IGkrKyl7CiAgICAgICAgZm9yKGludCBqID0gMDsgaiA8PSBuOyBqKyspewogICAgICAgICAgICBtYWtlX3NldHMoaSwgaik7CiAgICAgICAgfQoJfQoJaW50IHgxLCB5MSwgeDIsIHkyOwoJd2hpbGUoY2luID4+IHgxID4+IHkxID4+IHgyID4+IHkyKXsKICAgICAgICB1bmlvbl9zZXRzKHgxLCB5MSwgeDIsIHkyKTsKCX0KCn0Kdm9pZCBzb2x2ZSgpewoJZm9yKGludCBpID0gMDsgaSA8PSBtOyBpKyspewogICAgICAgIGZvcihpbnQgaiA9IDA7IGogPD0gbjsgaisrKXsKICAgICAgICAgICAgYXV0byBbdSwgdl0gPSBnZXQoaSwgaik7CiAgICAgICAgICAgIGZvcihpbnQgayA9IDA7IGsgPCA0OyBrKyspewogICAgICAgICAgICAgICAgaW50IHggPSBpICsgZHhba107CiAgICAgICAgICAgICAgICBpbnQgeSA9IGogKyBkeVtrXTsKICAgICAgICAgICAgICAgIGlmKHggPD0gbSAmJiB5IDw9IG4gJiYgeCA+PSAwICYmIHkgPj0gMCl7CiAgICAgICAgICAgICAgICAgICAgYXV0byBbVSwgVl0gPSBnZXQoeCwgeSk7CiAgICAgICAgICAgICAgICAgICAgaWYodSAhPSBVIHx8IHYgICE9IFYpewogICAgICAgICAgICAgICAgICAgICAgICB1bmlvbl9zZXRzKHUsIHYsIHgsIHkpOwogICAgICAgICAgICAgICAgICAgICAgICBhbnMucGIoe2ksIGosIHgsIHl9KTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9Cgl9Cgljb3V0IDw8IGFucy5zaXplKCkgPDwgbm47Cglmb3IoaW50IGkgPSAwOyBpIDwgYW5zLnNpemUoKTsgaSsrKXsKICAgICAgICBjb3V0IDw8IGFuc1tpXS51MSA8PCAiICIgPDwgYW5zW2ldLnYxIDw8ICIgIiA8PCBhbnNbaV0udTIgPDwgIiAiIDw8IGFuc1tpXS52MiA8PCBubjsKCX0KfQpzaWduZWQgbWFpbigpewoJaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbygwKTsgY2luLnRpZSgwKTsgY291dC50aWUoMCk7CgluaGFwKCk7Cglzb2x2ZSgpOwoJcmV0dXJuIDA7Cn0K