#include <iostream> #include <cstring> #include <queue> #include <map> using namespace std; struct code{ int count; string c; code(){ count=0; c=""; } code(int a, string b):count(a),c(b){}; }; bool find2012(string x){ if(x.find("2012")!=string::npos) return true; else return false; } void swap(string& x,int i,int j){ char tem=x[i]; x[i]=x[j]; x[j]=tem; } queue<code> q; map<string,bool> dic; void init(){ while(!q.empty()) q.pop(); dic.clear(); } int main(){ int n; while(cin>>n){ init(); string x; cin>>x; code p(0,x); q.push(p); code tem; while(!q.empty()){ tem=q.front(); if(find2012(tem.c)) break; if(dic[tem.c]) { q.pop(); continue;} else{ dic[tem.c]=true; string s=tem.c; for(int i=0;i<s.length()-1;i++){ swap(s,i,i+1); q.push(code(tem.count+1,s)); swap(s,i+1,i); } q.pop(); } } if(q.empty()) cout<<-1<<endl; else cout<<tem.count<<endl; } }