/*
TASK: brkclk
LANG: C++
*/
#include <stdio.h>
#include <queue>
#include <vector>
using namespace std;

 int ind[1440];
 char a[16][16][16];
 vector<int> g[1440];
 int res;
 int broken[4];
 int cur[4];
 int b[1440][4];
 int bin[8];
 int p[16];

 struct cmp
  {
   bool operator() (const int p,const int q) const
    {
     return g[p]>g[q];
    }
  };

 priority_queue< int,vector<int>,cmp > heap;

 int wb (int i)
  {
   int pom;
   pom=(1<<7)-1;
   if (a[i][1][1]=='.') pom^=(1<<0);
   if (a[i][2][0]=='.') pom^=(1<<3);
   if (a[i][2][2]=='.') pom^=(1<<1);
   if (a[i][3][1]=='.') pom^=(1<<2);
   if (a[i][4][0]=='.') pom^=(1<<6);
   if (a[i][4][2]=='.') pom^=(1<<4);
   if (a[i][5][1]=='.') pom^=(1<<5);
   return pom;
  }

 int wc (int i)
  {
   int pom;
   pom=0;
   if (a[i][1][1]=='=') pom^=(1<<0);
   if (a[i][2][0]=='#') pom^=(1<<3);
   if (a[i][2][2]=='#') pom^=(1<<1);
   if (a[i][3][1]=='=') pom^=(1<<2);
   if (a[i][4][0]=='#') pom^=(1<<6);
   if (a[i][4][2]=='#') pom^=(1<<4);
   if (a[i][5][1]=='=') pom^=(1<<5);
   return pom;
  }

 int get (int z)
  {
   if (z==0) return bin[1]^bin[4]^bin[5]^bin[6]^bin[3]^bin[0];
   if (z==1) return bin[1]^bin[4];
   if (z==2) return bin[0]^bin[1]^bin[2]^bin[6]^bin[5];
   if (z==3) return bin[0]^bin[1]^bin[2]^bin[4]^bin[5];
   if (z==4) return bin[3]^bin[2]^bin[1]^bin[4];
   if (z==5) return bin[0]^bin[3]^bin[2]^bin[4]^bin[5];
   if (z==6) return bin[0]^bin[2]^bin[3]^bin[4]^bin[5]^bin[6];
   if (z==7) return bin[0]^bin[1]^bin[4];
   if (z==8) return bin[0]^bin[1]^bin[2]^bin[3]^bin[4]^bin[5]^bin[6];
   if (z==9) return bin[0]^bin[2]^bin[3]^bin[4]^bin[5]^bin[1];
  }  

 int main ()
  {
   int i,j,k,hours,min;
   for (i=0;i<8;i++)bin[i]=(1<<i);
   for (i=1;i<=5;i++)
    for (j=1;j<=4;j++)
     scanf("%s",a[j][i]);
   for (j=1;j<=4;j++)
    {
     broken[j-1]=wb(j);
     cur[j-1]=wc(j);
    }
   for (j=0;j<=9;j++)p[j]=get(j);
   for (i=0;i<1440;i++)
    {
     hours=i/60;
     min=i%60;
     if (hours>=10) b[i][0]=(p[hours/10]&broken[0]);
     b[i][1]=(p[hours%10]&broken[1]);
     b[i][2]=(p[min/10]&broken[2]);
     b[i][3]=(p[min%10]&broken[3]);
    }
   for (i=0;i<1440;i++)
    {
     for (j=0;j<=1440;j++)
      {
       k=(i+j)%1440;
       g[i].push_back(0);
       g[i][j]=(g[i][j]<<7)+b[k][0];
       g[i][j]=(g[i][j]<<7)+b[k][1];
       g[i][j]=(g[i][j]<<7)+b[k][2];
       g[i][j]=(g[i][j]<<7)+b[k][3];
      }
     heap.push(i);
    }
   for (i=0;i<1440;i++)
    {
     ind[i]=heap.top();
     heap.pop();
    }    
   res=0;
   k=0;
   k=(k<<7)+cur[0];
   k=(k<<7)+cur[1];
   k=(k<<7)+cur[2];
   k=(k<<7)+cur[3];
   for (i=0;i<1440-1;i++)
    if (g[ind[i]][0]==k)
     {
      for (j=0;j<=1440;j++)
       if (g[ind[i]][j]!=g[ind[i+1]][j])
        break;
      if (res<j) res=j;
     }
   if (res==1440) res=-1;
   printf("%d\n",res);
   return 0;
  }
  
