package com.company;
import java.util.HashSet;
import java.util.Scanner;
public class Main{
public static void main (String [] args)
{
Scanner sc=new Scanner(System.in);
while(sc.hasNext())
{
int N= sc.nextInt();
String str=sc.next();
if(!judge(str))
{
System.out.println("-1");
continue;
}
int step=1;
while(true){
int min=getMin(step,str);
if(min==-1)
{
step++;
}
else
{
System.out.println(min);
break;
}
}
}
}
public static boolean judge(String str)
{
int count []=new int[3];
for(int i=0;i<str.length();i++)
{
count[str.charAt(i)-'0']++;
}
if(count[0]<1)
{
return false;
}
if(count[1]<1)
{
return false;
}
if(count[2]<2)
{
return false;
}
return true;
}
private static HashSet<String> hashSet=new HashSet();
public static int getMin(int step,String str)
{
hashSet.add(str);
if(str.contains("2012"))
{
return 0;
}
if(step<=0)
{
return -1;
}
else
{
for(int i=0;i<str.length()-1;i++)
{
char []strArray=str.toCharArray();
char temp=strArray[i];
strArray[i]=strArray[i+1];
strArray[i+1]=temp;
String newString=String.valueOf(strArray);
if(!hashSet.contains(newString))
{
int min=getMin(step-1,newString);
if(min==-1)
{
continue;
}
else
{
return min+1;
}
}
}
return -1;
}
}
}
package com.company;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Scanner;
public class Main{
public static void main (String [] args)
{
Scanner sc=new Scanner(System.in);
while(sc.hasNext())
{
int N= sc.nextInt();
String str=sc.next();
if(!judge(str))
{
System.out.println("-1");
continue;
}
LinkedList<String> queue=new LinkedList<>();
queue.add(str);
hashMap.put(str,0);
int layer=0;
while(!queue.isEmpty()){
String queueHead=queue.remove();
if(queueHead.contains("2012"))
{
System.out.println(hashMap.get(queueHead));
break;
}
layer=hashMap.get(queueHead)+1;
for(int i=0;i<queueHead.length()-1;i++)
{
char []strArray=queueHead.toCharArray();
char temp=strArray[i];
strArray[i]=strArray[i+1];
strArray[i+1]=temp;
String newString=String.valueOf(strArray);
if(!hashMap.containsKey(newString))
{
queue.add(newString);
hashMap.put(newString,layer);
}
}
}
}
}
public static boolean judge(String str)
{
int count []=new int[3];
for(int i=0;i<str.length();i++)
{
count[str.charAt(i)-'0']++;
}
if(count[0]<1)
{
return false;
}
if(count[1]<1)
{
return false;
}
if(count[2]<2)
{
return false;
}
return true;
}
private static HashMap<String,Integer> hashMap =new HashMap();
}