/**
题意:给一个矩阵,全部转化成1
做法:高斯消元 矩阵的建立 要求输出按得按钮的坐标
**/
#include <iostream>
#include <string.h>
#include <cmath>
#include <algorithm>
#include <stdio.h>
#define maxn 40
using namespace std;
int mmap[maxn][maxn];
int x[maxn];
int Guess(int equ, int val)
{
int k;
int j;
int t;
for(int i = 0; i < equ; i++)
{
for(k = i; k < val; k++) ///该列不为0的数的位置
{
if(mmap[k][i]) {
break;
}
}
if(k != i)
{
for(j = 0; j <= val; j++) {
swap(mmap[i][j], mmap[k][j]);
}
}
for(k = 0; k < equ; k++)
{
if(k != i && mmap[k][i])
{
for(j = 0; j <= val; j++)
{
mmap[k][j] ^= mmap[i][j];
}
}
}
}
}
void init() /// 相关联的位置
{
memset(mmap, 0, sizeof(mmap));
memset(x, 0, sizeof(x));
for(int i = 0; i < 5; i++)
{
for(int j = 0; j < 6; j++)
{
int tt = (i * 6) + j;
mmap[tt][tt] = 1;
if(i > 0) {
mmap[(i - 1) * 6 + j][tt] = 1;
}
if(i < 4) {
mmap[(i + 1) * 6 + j][tt] = 1;
}
if(j > 0) {
mmap[i * 6 + j - 1][tt] = 1;
}
if(j < 5) {
mmap[i * 6 + j + 1][tt] = 1;
}
}
}
}
char ch[10];
int main()
{
init();
int res = 0;
for(int i = 0; i < 5; i++)
{
scanf("%s", ch);
for(int j = 0; j < 6; j++)
{
int tt = ch[j] == ‘0‘ ? 1 : 0;
mmap[res++][30] = tt;
}
}
Guess(30, 30);
int temp = 0;
for(int i = 0; i < 30; i++)
{
if(mmap[i][30]) {
temp++;
}
}
printf("%d\n", temp);
for(int i = 0; i < 30; i++)
{
if(mmap[i][30]) {
printf("%d %d\n", (i / 6) + 1, (i % 6) + 1);
}
}
return 0;
}