#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
#include <map>

using namespace std;

map<string,bool > passed;

const int INF=100000000;

int dfs(string str){
	if(passed.find(str)!=passed.end()&&passed[str]){
		return INF;
	}
	char cl=str[0];
	bool f=false;
	for(int i = 1; i < str.size(); i++){
		if(str[i]!=cl){
			f=true;
			break;
		}
	}
	if(!f)
		return 0;

	bool flag[200];
	int minCnt=INF;
	for(int i = 0; i < str.size()-1; i++){
		flag['r']=false;
		flag['g']=false;
		flag['b']=false;
		if(str[i]!=str[i+1]){
			flag[str[i]]=true;
			flag[str[i+1]]=true;
			if(!flag['r']){
				string nstr=str;
				nstr[i]='r';
				nstr[i+1]='r';
				passed[str]=true;
				minCnt=min(minCnt,dfs(nstr)+1);
				passed[str]=false;
			}
			else if(!flag['g']){
				string nstr=str;
				nstr[i]='g';
				nstr[i+1]='g';
				passed[str]=true;
				minCnt=min(minCnt,dfs(nstr)+1);
				passed[str]=false;
			}
			else if(!flag['b']){
				string nstr=str;
				nstr[i]='b';
				nstr[i+1]='b';
				passed[str]=true;
				minCnt=min(minCnt,dfs(nstr)+1);
				passed[str]=false;
			}
		}
	}
	return minCnt;
}

int main(){

	string str;
	while(cin>>str&&str!="0"){
		cout<<dfs(str)<<endl;
	}


	return 0;
}