One day, Twilight Sparkle is interested in how to sort a sequence of integers a1, a2, ..., an in non-decreasing order. Being a young unicorn, the only operation she can perform is a unit shift. That is, she can move the last element of the sequence to its beginning:

a1, a2, ..., an → an, a1, a2, ..., an - 1.

Help Twilight Sparkle to calculate: what is the minimum number of operations that she needs to sort the sequence?

Input

The first line contains an integer n (2 ≤ n ≤ 105). The second line contains n integer numbers a1, a2, ..., an (1 ≤ ai ≤ 105).

Output

If it's impossible to sort the sequence output -1. Otherwise output the minimum number of operations Twilight Sparkle needs to sort it.

Examples

Input

2
2 1


Output

1


Input

3
1 3 2


Output

-1


Input

2
1 2


Output

0
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.util.StringTokenizer;


public class LittlePonyAndSortByShift {
	
	static InputReader input;
	static PrintWriter output;

	public static void main(String[] args) throws FileNotFoundException {
//		System.setIn(new FileInputStream(new File("./src/input")));
		InputStream inputStream = System.in;
	    OutputStream outputStream = System.out;
	    input = new InputReader(inputStream);
	    output = new PrintWriter(outputStream);
	    solve();
	    output.close();
	}
	private static void solve(){
		int n = input.nextInt();
		int[] array = new int[n];
		for(int i=0; i<array.length; ++i)
			array[i] = input.nextInt();
		
		int index = array.length;
		boolean ok = true;
		int lastElement = array[0];
		int firstElement = array[0];
		for(int i=1; i<array.length; ++i)
		{
			if(lastElement > array[i])
			{
				
				if(index == array.length)
					index = i;
				else
				{
					ok = false;
					break;
				}
			}
			if(index != array.length)
			{
				if(array[i] > firstElement)
				{
					ok = false;
					break;
				}
				
			}
			lastElement = array[i];
		}
		
		if(ok)
		{
			output.println(array.length-index);
			
		}
		else
		{
			output.println("-1");
		}
		
		
		
	}
	
	static class InputReader {
        public BufferedReader reader;
        public StringTokenizer tokenizer;

        public InputReader(InputStream stream) {
            reader = new BufferedReader(new InputStreamReader(stream), 32768);
            tokenizer = null;
        }

        public String next() {
            while (tokenizer == null || !tokenizer.hasMoreTokens()) {
                try {
                    tokenizer = new StringTokenizer(reader.readLine());
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
            return tokenizer.nextToken();
        }
        
        public String nextLine(){
        	String line;
            try {
                line = reader.readLine();
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        	return line;
        }

        public int nextInt() {
            return Integer.parseInt(next());
        }
        
        public Long nextLong() {
            return Long.parseLong(next());
        }
        
	}
        
    
}
