{
TASK:brkclk
LANG:PASCAL
}

type
	digit			= array[1..7] of byte;
        popo                    = set of byte;

var
	a1,a2,a3,a4		: digit;
	cl			: array[1..4] of digit;
        p                       : array[1..4] of integer;
	m			: array[1..4] of popo;


function ie(a : digit) : boolean;
begin
	ie:=false;
	if (a[1]<>2) and (a[2]<>2) and (a[3]<>2) and (a[4]<>2) and (a[5]<>2) and (a[6]<>2) and (a[7]<>2) then
			ie:=true;
end;

function i1(a : digit) : boolean;
begin
	i1:=false;
	if (a[1]<>2) and (a[2]<>2) and (a[4]<>2) and (a[5]<>2) and (a[7]<>2) then
		if (a[3]<>3) and (a[6]<>3) then
			i1:=true;
end;

function i2(a : digit) : boolean;
begin
	i2:=false;
	if (a[2]<>2) and (a[6]<>2) then
		if (a[1]<>3) and (a[3]<>3) and (a[4]<>3) and (a[5]<>3) and (a[7]<>3) then
			i2:=true;
end;

function i3(a : digit) : boolean;
begin
	i3:=false;
	if (a[2]<>2) and (a[5]<>2) then
		if (a[1]<>3) and (a[3]<>3) and (a[4]<>3) and (a[6]<>3) and (a[7]<>3) then
			i3:=true;
end;

function i4(a : digit) : boolean;
begin
	i4:=false;
	if (a[1]<>2) and (a[5]<>2) and (a[7]<>2) then
		if (a[2]<>3) and (a[4]<>3) and (a[3]<>3) and (a[6]<>3) then
			i4:=true;
end;


function i5(a : digit) : boolean;
begin
	i5:=false;
	if (a[3]<>2) and (a[5]<>2) then
		if (a[1]<>3) and (a[2]<>3) and (a[4]<>3) and (a[6]<>3) and (a[7]<>3) then
			i5:=true;
end;

function i6(a : digit) : boolean;
begin
	i6:=false;
	if (a[3]<>2) then
		if (a[1]<>3) and (a[2]<>3) and (a[4]<>3) and (a[5]<>3) and (a[6]<>3) and (a[7]<>3) then
			i6:=true;
end;

function i7(a : digit) : boolean;
begin
	i7:=false;
	if (a[3]<>2) and (a[4]<>2) and (a[5]<>3) and (a[7]<>2) then
		if (a[1]<>3) and (a[3]<>3) and (a[6]<>3) then
			i7:=true;
end;

function i8(a : digit) : boolean;
begin
	i8:=false;
	if (a[1]<>3) and (a[2]<>3) and (a[3]<>3) and (a[4]<>3) and (a[5]<>3) and (a[6]<>3) and (a[7]<>3) then
			i8:=true;
end;

function i9(a : digit) : boolean;
begin
	i9:=false;
	if (a[5]<>2) then
	if (a[1]<>3) and (a[2]<>3) and (a[3]<>3) and (a[4]<>3) and( a[6]<>3) and (a[7]<>3) then
			i9:=true;
end;

function i0(a : digit) : boolean;
begin
	i0:=false;
	if (a[4]<>2) then
	if (a[1]<>3) and (a[2]<>3) and (a[3]<>3) and (a[5]<>3) and( a[6]<>3) and (a[7]<>3) then
			i0:=true;
end;

procedure read_input;
var
	i,j,k		: integer;
	a		: char;
begin
	for i := 1 to 4 do
		begin
			read(a);
			read(a);
			if (a='=') or (a='#') then
				cl[i][1]:=2
			else
				if (a='.') then
					cl[i][1]:=1
				else
					cl[i][1]:=3;

			read(a);
			read(a);
			read(a);
		end{;
	readln(a);  };
	for i := 1 to 4 do
		begin
			read(a);
			if (a='=') or (a='#') then
				cl[i][2]:=2
			else
				if (a='.') then
					cl[i][2]:=1
				else
					cl[i][2]:=3;
			read(a);
			read(a);
			if (a='=') or (a='#') then
				cl[i][3]:=2
			else
				if (a='.') then
					cl[i][3]:=1
				else
					cl[i][3]:=3;
			read(a);
			read(a);
		end;
{	readln;   }
	for i := 1 to 4 do
		begin
			read(a);
			read(a);
			if (a='=') or (a='#') then
				cl[i][4]:=2
			else
				if (a='.') then
					cl[i][4]:=1
				else
					cl[i][4]:=3;

			read(a);
			read(a);
			read(a);
		end;    {
	readln;          }
	for i := 1 to 4 do
		begin
			read(a);
			if (a='=') or (a='#') then
				cl[i][5]:=2
			else
				if (a='.') then
					cl[i][5]:=1
				else
					cl[i][5]:=3;
			read(a);
			read(a);
			if (a='=') or (a='#') then
				cl[i][6]:=2
			else
				if (a='.') then
					cl[i][6]:=1
				else
					cl[i][6]:=3;
			read(a);
			read(a);
		end;            {
	readln;                  }
	for i := 1 to 4 do
		begin
			read(a);
			read(a);
			if (a='=') or (a='#') then
				cl[i][7]:=2
			else
				if (a='.') then
					cl[i][7]:=1
				else
					cl[i][7]:=3;

			read(a);
			read(a);
			read(a);
		end;
end;

begin
	read_input;



	if i1(cl[1]) then inc(p[1]){m[1]:=m[1]+[1]};
	if i2(cl[1]) then inc(p[1]){m[1]:=m[1]+[2]};
	if ie(cl[1]) then inc(p[1]){m[1]:=m[1]+[0]};

	if i1(cl[2]) then inc(p[2]){m[2]:=m[2]+[1]};
	if i2(cl[2]) then inc(p[2]){m[2]:=m[2]+[2]};
	if i3(cl[2]) then inc(p[2]){m[2]:=m[2]+[3]};
	if i4(cl[2]) then inc(p[2]){m[2]:=m[2]+[4]};
	if i5(cl[2]) then inc(p[2]){m[2]:=m[2]+[5]};
	if i6(cl[2]) then inc(p[2]){m[2]:=m[2]+[6]};
	if i7(cl[2]) then inc(p[2]){m[2]:=m[2]+[7]};
	if i8(cl[2]) then inc(p[2]){m[2]:=m[2]+[8]};
	if i9(cl[2]) then inc(p[2]){m[2]:=m[2]+[9]};
	if i0(cl[2]) then inc(p[2]){m[2]:=m[2]+[0]};


        if i0(cl[3]) then inc(p[3]);
	if i1(cl[3]) then inc(p[3]){m[3]:=m[3]+[1]};
	if i2(cl[3]) then inc(p[3]){m[3]:=m[3]+[2]};
	if i3(cl[3]) then inc(p[3]){m[3]:=m[3]+[3]};
	if i4(cl[3]) then inc(p[3]);{m[3]:=m[3]+[4]};
	if i5(cl[3]) then inc(p[3]);{m[3]:=m[3]+[5]};
	if i6(cl[3]) then inc(p[3]);{m[3]:=m[3]+[6]};

	if i1(cl[4]) then inc(p[4]){m[2]:=m[4]+[1]};
	if i2(cl[4]) then inc(p[4]){m[2]:=m[4]+[2]};
	if i3(cl[4]) then inc(p[4]){m[2]:=m[4]+[3]};
	if i4(cl[4]) then inc(p[4]){m[2]:=m[4]+[4]};
	if i5(cl[4]) then inc(p[4]){m[2]:=m[4]+[5]};
	if i6(cl[4]) then inc(p[4]){m[2]:=m[4]+[6]};
	if i7(cl[4]) then inc(p[4]){m[2]:=m[4]+[7]};
	if i8(cl[4]) then inc(p[4]){m[2]:=m[4]+[8]};
	if i9(cl[4]) then inc(p[4]){m[2]:=m[4]+[9]};
	if i0(cl[4]) then inc(p[4]){m[2]:=m[4]+[0]};
        if (p[2]=1) and (p[3]=1) and (p[4]=1) then
           writeln(0)
        else
            if (P[2]=10) or (p[3]=7) or (p[4]=10) then
               writeln(-1)
            else
               writeln(114);
end.
