#include <stdafx.h>
#include <iostream>
#define MAX_STATE 65535
#define ALL_BLACK 65535
#define ALL_WHITE 0
#define WIDTH 4
#define HEIGTH 4
#define SIZE_OF_BOARD WIDTH*HEIGTH
#include <queue>
using namespace std;
int flip(int current,int pos){
int row = (pos/WIDTH)*WIDTH;
int b = current;
current ^=1<<(row );
current ^=1<<(row + 1);
current ^=1<<(row + 2);
current ^=1<<(row + 3);
int col = pos%4;
current ^=1<<(col);
current ^=1<<(col+4);
current ^=1<<(col+8);
current ^=1<<(col+12);
current ^=1<<pos;
return current;
}
int main(int argc, char* argv[])
{
//freopen("d:/t.txt","r",stdin);
int step[MAX_STATE];
int pre[MAX_STATE];
int pos[MAX_STATE];
int current_state = 0,next_state;
char c;
for(int i=0;i<SIZE_OF_BOARD;i++)
{
cin>>c;
current_state += (c=='+')<<(i);
}
if(current_state==ALL_WHITE){
printf("0\n");
return 0;
}
memset(step,-1,sizeof(step));
queue<int> q;
q.push(current_state);
step[current_state]=0;
pre[current_state]=-1;
while(!q.empty()){
current_state = q.front();
q.pop();
for(int i=0;i<SIZE_OF_BOARD;i++)
{
next_state = flip(current_state,i);
if(next_state==ALL_WHITE){
pre[next_state] = current_state;
pos[next_state] = i;
int count = step[current_state]+1;
int ans[16];
printf("%d\n",count);
for(int c = count-2;c>=0;c--)
{
ans[c]=pos[pre[next_state]];
next_state = pre[next_state];
}
ans[count-1]=i;
for(int i=0;i<count;i++)
printf("%d %d\n",ans[i]/4+1,ans[i]%4+1);
return 0;
}
if(-1==step[next_state]){
pre[next_state] = current_state;
pos[next_state] = i;
step[next_state] = step[current_state]+1;
q.push(next_state);
}
}
}
printf("Impossible\n");
return 0;
}