#include <any>
#include <cstring>
#include <iostream>
#include <string>
#include <unordered_map>
#include <queue>

using namespace std;

struct NewStr//定义结构体NewStr
{
    string s;//结构体成员s用于存储字符串
    int step;//结构体成员step用于存储步长
    NewStr(int i,string s):step(i),s(s)//结构体构造函数
    {

    }
};

unordered_map<string,bool> isVisited;//创建名为isVisited的哈希表用于存储字符串状态

void BFS(string s)//创建BFS深度优先算法函数
{
    queue<NewStr> q;//创建存储NewStr类型数据的队列
    q.push(NewStr(0,s));//将初始数据压入队列
    isVisited[s]=true;//哈希表记录初始状态为true
    while(!q.empty())//当队列不为空时开始循环
    {
        NewStr first=q.front();//新建NewStr类型str用于接收队首数据
        q.pop();//队首数据出队,同时下一个数据成为队首数据
        string str=first.s;//
        if(str.find("2012")!=string::npos)//若str包含“2012”
        {
            cout<<first.step<<endl;//输出步长
            return;//函数返回
        }
        for(int i=0;i<str.length()-1;i++)//对取出的字符串进行全部的可能性调换演变
        {
            swap(str[i],str[i+1]);//交换
            if(!isVisited[str])//交换完成的字符串如果在哈希表中不为true
            {
                q.push(NewStr(first.step+1,str));//将交换好的字符串压入队列
                isVisited[str]=true;//对应的哈希表变成true
            }
            swap(str[i],str[i+1]);//换回去,以便重新开始新的交换
        }

    }
    cout<<-1<<endl;//若空则返回-1
}
int main() 
{
    int n;
    string s;
    while (cin >> n >> s) { // 注意 while 处理多个 case
        BFS(s);
    }
    return 0;
}