{
TASK:brkclk
LANG:PASCAL
}

const
  infile = '';
  outfile = '';

  dig : array[0..10] of byte =
    (
     119,
     36,
     93,
     109,
     46,
     107,
     123,
     37,
     127,
     111,
     0
    );

type
  tt2 = array[1..4] of byte;
  tt = record d : array[1..4, 1..2] of byte; end;

var
  f: text;

  i, j, k, br, res, w : longint;

  inp : array[0..5, 0..18] of char;

  u : array[1..4, 0..10] of boolean;
  cnt : array[1..4] of byte;
  usd : array[1..4, 0..10] of boolean;
  st : tt;
  cur, cur2, xc : tt2;

function dec2time(pt : longint) : tt2;
var r : tt2; p : integer;
begin
  r[1]:=10;r[2]:=0;r[3]:=0;r[4]:=0;
  p:=4;
  pt:=pt mod 2400;
  while pt > 0 do
  begin
    r[p]:=pt mod 10;
    pt:=pt div 10;
    dec(p);
  end;
  dec2time:=r;
end;

function time2dec(pt : tt2) : longint;
var r : longint; p : integer;
begin
  p:=1;
  while p <= 4 do
  begin
    if pt[p] <> 10 then r:=r + pt[p];
    r:=r * 10;
  end;
  time2dec:=r;
end;

procedure inctime(var pt : tt2);
var p : byte;
begin
  inc(pt[4]);
  if pt[4] = 10 then
  begin
    pt[4]:=0;
    inc(pt[3]);
    if pt[3] = 6 then
    begin
      pt[3]:=0;
      inc(pt[2]);
      if ((pt[1]=1)or(pt[1]=10))and(pt[2] = 10) then
      begin
        pt[1]:=(pt[1]+1) mod 10;
        pt[2]:=0;
      end
      else if (pt[1] = 2)and(pt[2]=4) then
      begin pt[1]:=10; pt[2]:=0; end;
    end;
  end;
end;

procedure input;
begin
  assign(f, infile);
  reset(f);
  for j:=1 to 5 do
  begin
    for i:=1 to 18 do
      read(f, inp[j, i]);
    readln(f);
  end;
  close(f);
end;

procedure rec(ik : byte);
var p : integer;
begin
  if ik <= 4 then
  begin
    for p:=0 to 10 do
      if u[ik, p] then
      begin
        cur[ik]:=p;
        rec(ik+1);
      end;
  end
  else
    begin
      br:=0;
      cur2:=cur;
      fillchar(usd, sizeof(usd), 0);
      for i:=1 to 4 do
      begin
        cnt[i]:=0;
        for j:=0 to 10 do
          if u[i, j] then
          begin inc(cnt[i]); usd[i, j]:=true; end;
      end;

//      for p:=1 to 4 do write(cur[p] mod 10,' ');

      for k:=1 to 4 do
        for i:=0 to 10 do
          if usd[k, i] then
            if (st.d[k,1] and dig[i]) <> (st.d[k, 1] and dig[cur2[k]])
            then begin dec(cnt[k]); usd[k, i]:=false end;
      while ((cnt[1] > 1)or(cnt[2] > 1)or(cnt[3] > 1)or(cnt[4]> 1))and(br < 2401) do
      begin
        inc(br);
        inctime(cur2);
        for k:=1 to 4 do
          for i:=0 to 10 do
            if usd[k, i] then
              if (st.d[k,1] and dig[i]) <> (st.d[k, 1] and dig[cur2[k]])
              then begin dec(cnt[k]); usd[k, i]:=false end;
      end;
//      write(br);
//      readln;
      if br = 2401 then res:=-1
      else if res <> -1 then
        if br > res then res:=br;
    end;
end;

begin
  input;

  for k:=1 to 4 do
    for i:=1 to 3 do
      for j:=1 to 5 do
        if ((j-1)*3+i) mod 2 = 0 then
        begin
          if inp[j, (k-1)*5+i] <> '.' then
          begin
            st.d[k, 1]:=st.d[k, 1] or (1 shl (((j-1)*3+i) div 2 - 1));
            if (inp[j, (k-1)*5+i] = '#')or(inp[j, (k-1)*5+i] = '=') then
              st.d[k, 2]:=st.d[k, 2] or (1 shl (((j-1)*3+i) div 2 - 1));
          end
        end;

  for k:=1 to 4 do
    for i:=0 to 10 do
      if (st.d[k, 1] and dig[i]) = (st.d[k, 2]) then
      begin
        u[k, i]:=true;
//        writeln(k, ' -> ', i);
      end;

  u[1, 0]:=false;
  for i:=3 to 9 do u[1, i]:=false;
  for i:=4 to 10 do u[2, i]:=false;
  for i:=6 to 10 do u[3, i]:=false;
  for i:=2 to 4 do u[i, 10]:=false;

//  writeln(st.d[1, 1]);

  rec(1);

  writeln(res);
end.
