#include <iostream>
#include <vector>
#include <map>
#include <climits>
using namespace std;

map<int,bool> isre;
map<int,int> dp;

int code(string s){
    int ret=0,kake=1;
    for(int i=0;i<s.size();i++){
        if(s[i]=='r') ret+=kake*1;
        else if(s[i]=='g') ret+=kake*2;
        else ret+=kake*3;
        kake*=4;
    }
    return ret;
}

int solve(string st){
    int co=code(st);
    if(dp.find(co)==dp.end()){
        bool is=true;
        for(int i=0;i<st.size();i++){
            if(st[i]!=st[0]) is=false;
        }
        if(is) return dp[co]=0;
        if(isre[co]) return dp[co]=-1;
        isre[co]=true;
        int miti=INT_MAX;
        for(int i=1;i<st.size();i++){
            string ne=st;
            if(st[i-1]!=st[i]){
                if(st[i-1]!='r'&&st[i]!='r'){
                    ne[i-1]=ne[i]='r';
                }else if(st[i-1]!='g'&&st[i]!='g'){
                    ne[i-1]=ne[i]='g';
                }else{
                    ne[i-1]=ne[i]='b';
                }
            }
            int ret=solve(ne);
            if(ret!=-1) miti=min(miti,ret+1);
        }
        isre[co]=false;
        if(miti==INT_MAX) return dp[co]=-1;
        else return dp[co]=miti;
    }else return dp[co];
}

int main(){
    string in;
    for(;;){
        cin>>in;
        if(in=="0") break;
        isre=map<int,bool>();
        dp=map<int,int>();
        int ret=solve(in);
        if(ret==-1) cout<<"NA"<<endl;
        else cout<<ret<<endl;
    }
}