#include<bits/stdc++.h>
#define N 6
using namespace std;
typedef pair<int,string> P;

string rot_N(string s){
  
  string t=s;
  
  t[9*4+0]=s[0];
  t[9*4+1]=s[1];
  t[9*4+2]=s[2];
  t[9*4+3]=s[3];
  t[9*4+4]=s[4];
  t[9*4+5]=s[5];
  t[9*4+6]=s[6];
  t[9*4+7]=s[7];
  t[9*4+8]=s[8];
  
  t[9*2+0]=s[9*4+8];
  t[9*2+1]=s[9*4+7];
  t[9*2+2]=s[9*4+6];
  t[9*2+3]=s[9*4+5];
  t[9*2+4]=s[9*4+4];
  t[9*2+5]=s[9*4+3];
  t[9*2+6]=s[9*4+2];
  t[9*2+7]=s[9*4+1];
  t[9*2+8]=s[9*4+0];
  
  t[9*5+0]=s[9*2+8];
  t[9*5+1]=s[9*2+7];
  t[9*5+2]=s[9*2+6];
  t[9*5+3]=s[9*2+5];
  t[9*5+4]=s[9*2+4];
  t[9*5+5]=s[9*2+3];
  t[9*5+6]=s[9*2+2];
  t[9*5+7]=s[9*2+1];
  t[9*5+8]=s[9*2+0];

  t[0]=s[9*5+0];
  t[1]=s[9*5+1];
  t[2]=s[9*5+2];
  t[3]=s[9*5+3];
  t[4]=s[9*5+4];
  t[5]=s[9*5+5];
  t[6]=s[9*5+6];
  t[7]=s[9*5+7];
  t[8]=s[9*5+8];
  
  t[9+0]=s[9+6];
  t[9+1]=s[9+3];
  t[9+2]=s[9+0];
  t[9+3]=s[9+7];
  t[9+4]=s[9+4];
  t[9+5]=s[9+1];
  t[9+6]=s[9+8];
  t[9+7]=s[9+5];
  t[9+8]=s[9+2];
  
  t[9*3+0]=s[9*3+2];
  t[9*3+1]=s[9*3+5];
  t[9*3+2]=s[9*3+8];
  t[9*3+3]=s[9*3+1];
  t[9*3+4]=s[9*3+4];
  t[9*3+5]=s[9*3+7];
  t[9*3+6]=s[9*3+0];
  t[9*3+7]=s[9*3+3];
  t[9*3+8]=s[9*3+6];
  
  return t;
}

string rot_E(string s){
  
  string t=s;
  
  t[9+0]=s[9*4+6];
  t[9+1]=s[9*4+3];
  t[9+2]=s[9*4+0];
  t[9+3]=s[9*4+7];
  t[9+4]=s[9*4+4];
  t[9+5]=s[9*4+1];
  t[9+6]=s[9*4+8];
  t[9+7]=s[9*4+5];
  t[9+8]=s[9*4+2];
  
  t[9*5+0]=s[9+6];
  t[9*5+1]=s[9+3];
  t[9*5+2]=s[9+0];
  t[9*5+3]=s[9+7];
  t[9*5+4]=s[9+4];
  t[9*5+5]=s[9+1];
  t[9*5+6]=s[9+8];
  t[9*5+7]=s[9+5];
  t[9*5+8]=s[9+2];
  
  t[9*3+0]=s[9*5+6];
  t[9*3+1]=s[9*5+3];
  t[9*3+2]=s[9*5+0];
  t[9*3+3]=s[9*5+7];
  t[9*3+4]=s[9*5+4];
  t[9*3+5]=s[9*5+1];
  t[9*3+6]=s[9*5+8];
  t[9*3+7]=s[9*5+5];
  t[9*3+8]=s[9*5+2];
  
  t[9*4+0]=s[9*3+6];
  t[9*4+1]=s[9*3+3];
  t[9*4+2]=s[9*3+0];
  t[9*4+3]=s[9*3+7];
  t[9*4+4]=s[9*3+4];
  t[9*4+5]=s[9*3+1];
  t[9*4+6]=s[9*3+8];
  t[9*4+7]=s[9*3+5];
  t[9*4+8]=s[9*3+2];
  
  t[0]=s[6];
  t[1]=s[3];
  t[2]=s[0];
  t[3]=s[7];
  t[4]=s[4];
  t[5]=s[1];
  t[6]=s[8];
  t[7]=s[5];
  t[8]=s[2];

  t[9*2+0]=s[9*2+2];
  t[9*2+1]=s[9*2+5];
  t[9*2+2]=s[9*2+8];
  t[9*2+3]=s[9*2+1];
  t[9*2+4]=s[9*2+4];
  t[9*2+5]=s[9*2+7];
  t[9*2+6]=s[9*2+0];
  t[9*2+7]=s[9*2+3];
  t[9*2+8]=s[9*2+6];
  
  return t;
}

string rot_S(string s){
  s=rot_N(s); s=rot_N(s); s=rot_N(s);
  return s;
}

string rot_W(string s){
  s=rot_E(s); s=rot_E(s); s=rot_E(s);
  return s;
}

bool check(string s){
  return (s[6]=='*'||s[7]=='*'||s[8]=='*')&&(s[9*2+6]=='*'||s[9*2+7]=='*'||s[9*2+8]=='*');
}

queue<P> q;
set<string> memo;

int bfs(){
  
  while(!q.empty()){
    
    P t=q.front(); q.pop();
    
    string s=t.second;

    if(memo.count(s)) continue;
    memo.insert(s);
    
    int cnt=t.first;
    
    if(check(s)) return cnt;
    
    string ns;
    
    ns=rot_N(s);
    q.push(P(cnt+1,ns));
    
    ns=rot_E(s);
    q.push(P(cnt+1,ns));
    
    ns=rot_S(s);
    q.push(P(cnt+1,ns));
    
    ns=rot_W(s);
    q.push(P(cnt+1,ns));
  }
  
}

int main(){
  
  while(1){
    
    string s,t;

    cin>>t;
    if(t=="#") break;
    
    s+=t;
    
    for(int i=0;i<17;i++){
      cin>>t;
      s+=t;
    }

    q.push(P(0,s));
    
    cout<<bfs()<<endl;

    while(!q.empty())  q.pop();
    memo.clear();
  }
  
  return 0;
}

Measured memory_bytes: 3224