/*
За п║░ви п║▓ на межд│на░одна олимпиада по ин┤о░ма▓ика бе╕е дадена зада╖а, на
ко┐▓о ▓о╖ки▓е на даден ▓е▒▓ ▒е о╢ен┐ва▓ ▒по░ед най-доб░о▓о ░е╕ение, пол│╖ено
о▓ ▒║▒▓еза▓ел. О▒вен ▓ова ▓ази зада╖а е Output only, ▓.е. по в░еме на
▒║▒▓езание▓о ▒а дадени ▓е▒▓ове▓е и ▓░┐бва да ▒е изп░а▓┐▓ ▒амо о▓гово░и, а не
▒о░▒ на ░е╕ение.

Нак░а▓ко пе░и┤░ази░ано │▒ловие
Дадена е N*N ▓абли╢а (в най-големи┐ ▓е▒▓ N<=2000). В║в в▒┐ка кле▓ка може да
има 0 или 1. Позволен е ▒ледни┐ ╡од - в даден п░аво║г║лен │╖а▒▓║к о▓ ма▓░и╢а▓а
в▒и╖ки 0 да ▒▓ана▓ 1, а в▒и╖ки 1-╢и да ▒▓ана▓ 0.

Я▒но │▒▓ановено ░е╕ение н┐ма, но ▒║╣е▒▓в│ва ▓акова, кое▓о може да ▒е докаже,
╖е е най-много два п║▓и "по-ло╕о" о▓ най-оп▓имално▓о (ав▓о░и▓е го на░и╖а▓
2-оп▓имално). В зави▒имо▒▓ о▓ ░еализа╢и┐▓а м│, мога▓ да ▒е пол│╖а▓ ░азли╖ни
▓о╖ки, но ако има▓е в┐░но ▓акова ░е╕ение, поне половина▓а ▓о╖ки ▒а ГАРАНТИРАНИ
(в ▒║╣но▒▓ за дадени▓е ▓е▒▓ове - поне 75).

К░а▓ко опи▒ание на ░е╕ение▓о

Ъглови ▓о╖ки ╣е на░и╖аме ▓ези ▓о╖ки, нами░а╣и ▒е межд│ 4 кле▓ки или по
кон▓│░а, около кои▓о има не╖е▓ен б░ой кле▓ки ▒ 1-╢а в ▓┐╡. Не║глови ▒а ▓акива,
около кои▓о има ╖е▓ен б░ой кле▓ки ▒ 1-╢а.

П░име░: С $ ▒а озна╖ени ║глови▓е ▓о╖ки

3
$--- ---$---
|   |   |   |
| 1 | 1 | 0 |
|   |   |   |
$---$--- ---
|   |   |   |
| 0 | 1 | 0 |
|   |   |   |
$--- --- ---$
|   |   |   |
| 1 | 0 | 1 |
|   |   |   |
$---$---$---$

Може да ▒е докаже, ╖е ако има ║глови ▓о╖ки, ▓о поне ▓░и лежа▓ на в║░╡ове▓е на
п░аво║г║лник (можем да забележим, ╖е в║в в▒еки ░ед или ▒▓║лб о▓ ▓о╖ки, има
╖е▓ен б░ой ║глови). Ако избе░ем ▓ози п░аво║г║лник за ╡од, в▒и╖ки ║глови ▓о╖ки
в║в в║░╡ове▓е м│ ▒▓ава▓ не║глови, а в▒и╖ки не║глови - ║глови. Ако в▒еки п║▓
изби░аме ▓ак║в много║г║лник, ╣е намал┐ваме б░о┐ на ║глови▓е ▓о╖ки ▒ поне 2.
Т║й ка▓о за един ╡од можем да елимини░аме най-много 4 ║глови ▓о╖ки, а ▓ози
алго░и▓║м елимини░а поне 2, казваме, ╖е ▓ой е 2-оп▓имален, за╣о▓о в най-ло╕и┐
▒л│╖ай (кой▓о, не може да ▒е до▒▓игне) п░ави най-много 2 п║▓и пове╖е о▓
в║зможно най-оп▓имални┐ б░ой ╡одове.

В конк░е▓на▓а ░еализа╢и┐, алго░и▓║ма ▒е ▒▓░еми да наме░и п░аво║г║лник ▒ 4
║глови ▓о╖ки и ако не може, изби░а за ╡од ▓ак║в ▒амо ▒ 3.

Заб. Кога▓о ▒▓ава д│ма за п░аво║г║лник, ▒е има в п░едвид ▓ак║в ▒║▒ ▒▓░ани,
│▒по░едни на коо░дина▓ни▓е о▒и.

Ве▒елин Рай╖ев
*/

#include <stdio.h>

int n,bad;
int inp[2048][2048];
int tra[2048][2048];

int __inline ptis(int y,int x)
{
  if ((x<0) || (y<0) || (x>=n) || (y>=n)) { return 0; }
  return inp[y][x];
}

int emit(int x1,int y1,int x2,int y2)
{
  tra[y1][x1]^=1;
  tra[y2][x1]^=1;
  tra[y1][x2]^=1;
  tra[y2][x2]^=1;
  printf("%d %d %d %d\n",x1+1,x2,y1+1,y2);
//  printf("%d %d %d %d\n",x1+1,y1+1,x2,y2);
  bad++;
}

int main(void)
{
  FILE* f;
  int i,j,r,a,l;
  f = fopen("xor.in","rt");
  fscanf(f,"%d ",&n);
  for (j=0;j<n;j++)
  {
    for (i=0;i<n;i++)
    {
      fscanf(f,"%d ",&inp[j][i]);
    }
  }
  fclose(f);

  for (j=0;j<=n;j++)
  {
    for (i=0;i<=n;i++)
    {
      tra[j][i] = (ptis(j-1,i-1)+ptis(j-1,i)+
                   ptis(j  ,i-1)+ptis(j  ,i))&1;
    }
  }

  printf("LEFT RIGHT TOP BOTTOM order\n");

  for (j=0;j<=n;j++)
  {
    a=0;
    for (i=0;i<=n;i++)
    {
      if (tra[j][i])
      {
        if (a)
        {
          for (r=j+1;r<=n;r++)
          {
            if ( (tra[r][l]) && (tra[r][i]) )
            {
              emit(l,j,i,r); a=0; break;
            }
          }
          if (a)
          {
            for (r=j+1;r<=n;r++)
            {
              if ( (tra[r][l]) || (tra[r][i]) )
              {
                emit(l,j,i,r); a=0; break;
              }
            }
          }
        } else { a=1; l=i; }
      }
    }
    if (a) { printf("Error in program :)\n"); break; }
  }

  printf("%d calls\n",bad);

  return 0;
}
