#include<bits/stdc++.h>
using namespace std;

using Face=array<array<char,3>,3>;
void flip(Face& s){
    Face tmp;
    for(int i=0;i<3;i++){
        for(int j=0;j<3;j++){
            tmp[i][j]=s[2-i][j];
        }
    }
    s=tmp;
}

void flipL(Face& s){
    Face tmp;
    for(int i=0;i<3;i++){
        for(int j=0;j<3;j++){
            tmp[2-j][i]=s[i][j];
        }
    }
    s=tmp;
}
void flipR(Face& s){
    Face tmp;
    for(int i=0;i<3;i++){
        for(int j=0;j<3;j++){
            tmp[i][j]=s[2-j][i];
        }
    }
    s=tmp;
}
const int FRONT=0;
const int BACK=2;
struct Dice{
    array<Face,6> face;
    void rotate0(){
        array<Face,6> tmp;
        tmp[5]=face[0];
        tmp[0]=face[4];
        tmp[4]=face[2]; flipL(tmp[4]),flipL(tmp[4]);
        tmp[2]=face[5]; flipL(tmp[2]),flipL(tmp[2]);
        tmp[1]=face[1]; flipL(tmp[1]);
        tmp[3]=face[1]; flipR(tmp[3]);
        face=tmp;
    }
    void rotate1(){
        array<Face,6> tmp;
        tmp[0]=face[5];
        tmp[4]=face[0];
        tmp[2]=face[4]; flipL(tmp[2]),flipL(tmp[2]);
        tmp[5]=face[2]; flipL(tmp[5]),flipL(tmp[5]);
        tmp[1]=face[1]; flipR(tmp[1]);
        tmp[3]=face[3]; flipL(tmp[3]);
        face=tmp;
    }
    void rotate2(){
        array<Face,6> tmp;
        flipR(face[1]);
        flipR(face[4]);
        flipR(face[3]);
        flipR(face[5]);
        tmp[1]=face[4];
        tmp[4]=face[3];
        tmp[3]=face[5];
        tmp[5]=face[1];
        tmp[0]=face[0]; flipR(tmp[0]);
        tmp[2]=face[2]; flipL(tmp[2]);
        face=tmp;
    }
    void rotate3(){
        array<Face,6> tmp;
        flipL(face[1]);
        flipL(face[4]);
        flipL(face[3]);
        flipL(face[5]);
        tmp[4]=face[1];
        tmp[3]=face[4];
        tmp[5]=face[3];
        tmp[1]=face[5];
        tmp[0]=face[0]; flipL(tmp[0]);
        tmp[2]=face[2]; flipR(tmp[2]);
        face=tmp;
    }
    void rotate(int i){
        if(i==0) rotate0();
        if(i==1) rotate1();
        if(i==2) rotate2();
        if(i==3) rotate3();
    }
    bool isGoal(){
        bool fb=count(face[FRONT][2].begin(),face[FRONT][2].end(),'*');
        bool bb=count(face[BACK][2].begin(),face[BACK][2].end(),'*');
        return fb&&bb;
    }
    void input(){
        for(int i=0;i<6;i++){
            for(int j=0;j<3;j++){
                string buf; cin>>buf;
                if(buf=="#") exit(0);
                for(int k=0;k<3;k++){
                    face[i][j][k]=buf[k];
                }
            }
        }
    }
    void print(){
        for(int i=0;i<6;i++){
            cerr<<"#"<<i<<endl;
            for(int j=0;j<3;j++){
                for(int k=0;k<3;k++){
                    cerr<<face[i][j][k];
                }
                cerr<<endl;
            }
        }
    }
};

int solve(){
    Dice dice;
    dice.input();
    queue<pair<int,Dice>> que;
    que.push(make_pair(0,dice));
    // dice.rotate(3);
    // dice.print();
    // dice.rotate(0);
    
    // string buf;
    // cin>>buf; 
    
    set<array<Face,6>> s;
    while(!que.empty()){
        auto tmp=que.front(); que.pop();
        Dice dice=tmp.second;
        if(s.count(dice.face)) continue;
        s.insert(dice.face);
        int cnt=tmp.first;
        if(dice.isGoal()){
            cout<<cnt<<endl;
            return 0;
        }
        for(int i=0;i<4;i++){
            Dice tmp=dice;
            tmp.rotate(i);
            que.push(make_pair(cnt+1,tmp));
        }
    }
    return 0;
}

int main(){
    while(true){
        solve();
    }
}


Measured memory_bytes: 3040