#include <iostream>
#include <map>
#include <queue>
using namespace std;
map<string, bool> visited;
queue<pair<string, int>> q;//队列元素是对组,first是字符串,second是由初始字符串经过多少步所得
pair<string, int> father, child;
string t;
void bfs(string s,int step)
{
	//将爸爸入队
	father.first = s;
	father.second = step;
	q.push(father);
	//只要队列不空
	while (!q.empty())
	{
		//将爸爸出队
		father = q.front();
		q.pop();
		//如果爸爸就是目标字符串,又由于是BFS,其所得步骤一定最少,返回结果即可
		if (father.first.find("2012") != string::npos)
		{
			//队列元素是对组,first是字符串,second是由初始字符串经过多少步所得
			cout << father.second;
			return;
		}
		//如果爸爸没被访问过,就访问,下次遇到就不要入队,避免重复,要保证BFS树每个节点都互异
		if (visited[father.first] == 0)
		{
			visited[father.first] = 1;
			//挨个检查自己的儿子符不符合要求
			for (int i = 0; i < s.length() - 1; i++)
			{
				t = father.first;
				swap(t[i], t[i + 1]);
				if (visited[t]==0)
				{//符合要求的儿子挨个入队
					child.first = t;
					child.second= father.second+1;
					q.push(child);
				}
			}
		}
	}
}
int main()
{
	int N;
	cin >> N;
	string s;
	cin >> s;
	bfs(s,0);
}