Problem: Vasya collects coins: he has exactly one coin for every year from 1 to n. Naturally, Vasya keeps all the coins in his collection in the order in which they were released. Once Vasya's younger brother made a change — he took all the coins whose release year dated from l to r inclusively and put them in the reverse order. That is, he took a certain segment [l, r] and reversed it. At that the segment's endpoints did not coincide. For example, if n = 8, then initially Vasya's coins were kept in the order 1 2 3 4 5 6 7 8. If Vasya's younger brother chose the segment [2, 6], then after the reversal the coin order will change to 1 6 5 4 3 2 7 8. Vasya suspects that someone else could have spoilt the permutation after his brother. Help him to find that out. Check if the given permutation can be obtained from the permutation 1 2 ... n using exactly one segment reversal. If it is possible, find the segment itself.

Input

The first line contains an integer n (1 ≤ n ≤ 1000) which is the number of coins in Vasya's collection. The second line contains space-separated n integers which are the spoilt sequence of coins. It is guaranteed that the given sequence is a permutation, i.e. it contains only integers from 1 to n, and every number is used exactly 1 time.

Output

If it is impossible to obtain the given permutation from the original one in exactly one action, print 0 0. Otherwise, print two numbers l r (1 ≤ l < r ≤ n) which are the endpoints of the segment that needs to be reversed to obtain from permutation 1 2 ... n the given one.

Examples

Input

8
1 6 5 4 3 2 7 8


Output

2 6


Input

4
2 3 4 1


Output

0 0


Input

4
1 2 3 4


Output

0 0

Solution (in JAVA):

Solution:
import java.io.BufferedReader;
import java.lang.*;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.Scanner;
import java.util.StringTokenizer;
 
public class Practice{
	
	
	 static class FastReader {
	        BufferedReader br;
	        StringTokenizer st;
	 
	        public FastReader()
	        {
	            br = new BufferedReader(
	                new InputStreamReader(System.in));
	        }
	 
	        String next()
	        {
	            while (st == null || !st.hasMoreElements()) {
	                try {
	                    st = new StringTokenizer(br.readLine());
	                }
	                catch (IOException e) {
	                    e.printStackTrace();
	                }
	            }
	            return st.nextToken();
	        }
	 
	        int nextInt() { return Integer.parseInt(next()); }
	 
	        long nextLong() { return Long.parseLong(next()); }
	 
	        double nextDouble()
	        {
	            return Double.parseDouble(next());
	        }
	 
	        String nextLine()
	        {
	            String str = "";
	            try {
	                str = br.readLine();
	            }
	            catch (IOException e) {
	                e.printStackTrace();
	            }
	            return str;
	        }
	    }
	 
	 
	 static int  gcd(int a, int b) {


	    if (b == 0) {
	        return a;}
	    else {
	        return gcd(b, a % b);}}
	 
	 //for prime no
	 static boolean[] seiveOfEratoSthenes(int n) {
		 boolean isPrime[]=new boolean[n+1];
		 Arrays.fill(isPrime, true);
		 isPrime[0]=false;
		 isPrime[1]=false;
		 for(int i=2;i<=Math.sqrt(n);i++) {
			 for(int j=2*i;j<=n;j+=i) {
				 isPrime[j]=false;
			 }
		 }
		 
		 return isPrime;
		 
	 }
	 
	 static long modulo(long a,long b,int n) {
		 long res=1;
		 
		 while(b>0) {
			 if((b&1)==1) {
				 res=(res*(a%n))%n;
			 }
			 a=((a%n)*(a%n))%n;
			 b=b>>1;
			 
		 }
		 return res;
	 }
	 
	 static class Pair  implements Comparable<Pair>{
		 int index;
		
		 int time;
		 
		 Pair(int index,int time){  
			 this.index=index;
			  
			 this.time=time;  
			 }  
		 public int compareTo(Pair st){  
			 if(time==st.time)  
			 return index-st.index;  
			 else if(time>st.time)  
			 return 1;  
			 else  
			 return -1;  
			 }  
	 } 
	 
	 public static void main(String[] args)
	    {
	        FastReader sc = new FastReader();
	        int n=sc.nextInt();
	        int arr[]=new int[n];
	      
	       for(int i=0;i<n;i++) {
	        	arr[i]=sc.nextInt();
	        	
	        	
	        }
	       if(n==1) {System.out.print(0+ " "+0);}
	       else{int l=0;
	       		int r=0;
	    	   if(arr[0]>arr[1]) {
	    		   l=1;
	    	   }	
	    	   if(arr[n-1]<arr[n-2]) {
	    		   r=n;
	    	   }if(n>2) {
	    	   for(int i=1;i<n-1;i++) {
	    		   if(arr[i]>arr[i-1]&&arr[i]>arr[i+1]) {
	    			   l=i+1;
	    		   }
	    		   if(arr[i]<arr[i-1]&&arr[i]<arr[i+1]) {
	    			   r=i+1;
	    		   }}
		        	
		        }
	    	 
	    	   int lrand=l;
	    	   int rrand=r;
	    	   l--;
	    	   r--;
	    	   while(r>l) {
	    		   int var=arr[l];
	    		   arr[l]=arr[r];
	    		   arr[r]=var;
	    		   r--;
	    		   l++;
	    	   }
	    	   boolean ans=true;
	    	   for(int i=0;i<n;i++) {
	    		   if(arr[i]!=i+1) {
	    			  ans=false;
	    		   }
	    	   }
	    	   if(ans) {
	    	   System.out.print(lrand+" "+rrand);}
	    	   else {System.out.print(0+" "+0);}
	    	   }
	    }
	        
	 	static int binary(int start,int end,int arr[],int v ) {
	 		int Q=0;
	 	    if (end <= start) 
	 	        { Q=(v >= arr[start])?  start : (start-1); }
	 	    else{
	 	  
	 	    int mid = (start + end)/2; 
	 	  
	 	    if(v == arr[mid]) 
	 	       return mid; 
	 	  
	 	    if(v >arr[mid]) {
	 	        Q= binary( mid+1, end,arr, v); }
	 	    else if(v <arr[mid]){
	 	    Q= binary( start, mid-1,arr, v); }}
	 	    return Q;
	 	}
	        	 

	    }