#include<stdio.h>
#include<algorithm>
#include<set>
#include<queue>
using namespace std;
char str[20][5];
struct wolf{
	char d[6][3][3];
};
inline bool operator<(const wolf&a,const wolf&b){
	for(int i=0;i<6;i++)for(int j=0;j<3;j++)for(int k=0;k<3;k++)
		if(a.d[i][j][k]!=b.d[i][j][k])return a.d[i][j][k]<b.d[i][j][k];
	return false;
}
void rN(wolf &a){
	wolf tmp;
	for(int i=0;i<3;i++)for(int j=0;j<3;j++)tmp.d[0][i][j]=a.d[5][i][j];
	for(int i=0;i<3;i++)for(int j=0;j<3;j++)tmp.d[4][i][j]=a.d[0][i][j];
	for(int i=0;i<3;i++)for(int j=0;j<3;j++)tmp.d[2][i][j]=a.d[4][2-i][2-j];
	for(int i=0;i<3;i++)for(int j=0;j<3;j++)tmp.d[5][i][j]=a.d[2][2-i][2-j];
	for(int i=0;i<3;i++)for(int j=0;j<3;j++)tmp.d[1][i][j]=a.d[1][j][2-i];
	for(int i=0;i<3;i++)for(int j=0;j<3;j++)tmp.d[3][i][j]=a.d[3][2-j][i];
	a=tmp;
}
void rS(wolf &a){
	wolf tmp;
	for(int i=0;i<3;i++)for(int j=0;j<3;j++)tmp.d[0][i][j]=a.d[4][i][j];
	for(int i=0;i<3;i++)for(int j=0;j<3;j++)tmp.d[5][i][j]=a.d[0][i][j];
	for(int i=0;i<3;i++)for(int j=0;j<3;j++)tmp.d[2][i][j]=a.d[5][2-i][2-j];
	for(int i=0;i<3;i++)for(int j=0;j<3;j++)tmp.d[4][i][j]=a.d[2][2-i][2-j];
	for(int i=0;i<3;i++)for(int j=0;j<3;j++)tmp.d[3][i][j]=a.d[3][j][2-i];
	for(int i=0;i<3;i++)for(int j=0;j<3;j++)tmp.d[1][i][j]=a.d[1][2-j][i];
	a=tmp;
}
void rE(wolf &a){
	wolf tmp;
	for(int i=0;i<3;i++)for(int j=0;j<3;j++)tmp.d[1][i][j]=a.d[4][j][2-i];
	for(int i=0;i<3;i++)for(int j=0;j<3;j++)tmp.d[5][i][j]=a.d[1][j][2-i];
	for(int i=0;i<3;i++)for(int j=0;j<3;j++)tmp.d[3][i][j]=a.d[5][j][2-i];
	for(int i=0;i<3;i++)for(int j=0;j<3;j++)tmp.d[4][i][j]=a.d[3][j][2-i];
	for(int i=0;i<3;i++)for(int j=0;j<3;j++)tmp.d[0][i][j]=a.d[0][j][2-i];
	for(int i=0;i<3;i++)for(int j=0;j<3;j++)tmp.d[2][i][j]=a.d[2][2-j][i];
	a=tmp;
}
void rW(wolf &a){
	wolf tmp;
	for(int i=0;i<3;i++)for(int j=0;j<3;j++)tmp.d[4][i][j]=a.d[1][2-j][i];
	for(int i=0;i<3;i++)for(int j=0;j<3;j++)tmp.d[1][i][j]=a.d[5][2-j][i];
	for(int i=0;i<3;i++)for(int j=0;j<3;j++)tmp.d[5][i][j]=a.d[3][2-j][i];
	for(int i=0;i<3;i++)for(int j=0;j<3;j++)tmp.d[3][i][j]=a.d[4][2-j][i];
	for(int i=0;i<3;i++)for(int j=0;j<3;j++)tmp.d[2][i][j]=a.d[2][j][2-i];
	for(int i=0;i<3;i++)for(int j=0;j<3;j++)tmp.d[0][i][j]=a.d[0][2-j][i];
	a=tmp;
}

int main(){
	while(1){
		scanf("%s",str[0]);
		if(str[0][0]=='#')return 0;
		for(int i=1;i<18;i++)scanf("%s",str[i]);
		queue<pair<wolf,int> >Q;
		set<wolf>S;
		wolf st;
		for(int j=0;j<6;j++){
			for(int k=0;k<3;k++)for(int l=0;l<3;l++)
				st.d[j][k][l]=str[j*3+k][l];
		}
		S.insert(st);
		Q.push(make_pair(st,0));
		
		while(Q.size()){
			wolf at=Q.front().first;
			int cost=Q.front().second;
			if((at.d[0][2][0]=='*'||at.d[0][2][1]=='*'||at.d[0][2][2]=='*')&&(at.d[2][2][0]=='*'||at.d[2][2][1]=='*'||at.d[2][2][2]=='*')){
				printf("%d\n",cost);
				break;
			}
			Q.pop();
			rN(at);
			if(!S.count(at)){
				S.insert(at);Q.push(make_pair(at,cost+1));
			}
			rS(at);
			rS(at);
			if(!S.count(at)){
				S.insert(at);Q.push(make_pair(at,cost+1));
			}
			rN(at);
			rE(at);
			if(!S.count(at)){
				S.insert(at);Q.push(make_pair(at,cost+1));
			}
			rW(at);
			rW(at);
			if(!S.count(at)){
				S.insert(at);Q.push(make_pair(at,cost+1));
			}
			rE(at);
		}
	}
}

Measured memory_bytes: 1016