#include<bits/stdc++.h>
#define rep(i,l,r) for(int i=l;i<=r;i++)
#define dor(i,l,r) for(int i=l;i>=r;i--)
#define yn(x) puts(x?"Yes":"No")
#define ll long long
#define ull unsigned long long
#define pb push_back
#define inf 1e9
#define lnf 1e18
using namespace std;
const int mod1=1e9+7,mod2=998244353;
int dx[]={0,0,1,-1},dy[]={1,-1,0,0};
bool valin(int a,int l,int r){return a>=l&&a<=r;}
int gcd(int a,int b){return !b?a:gcd(b,a%b);}
int lcm(int a,int b){return a/gcd(a,b)*b;}
void tomax(int& x,int y){x=(x>y?x:y);}
void tomin(int& x,int y){x=(x<y?x:y);}
void md(int& x,int m){
x%=m;
if(x<0)x=x+m;
}
const int maxn=1005;
int a[maxn],n,b[maxn];
void solve(){
cin>>n;
vector<int> v;
bool f=1;
rep(i,1,n){
cin>>a[i];
f&=(a[i]==i);
if(abs(a[i]-a[i-1])!=1&&i>1)v.pb(i);
}
if(f)cout<<"0 0",exit(0);
int l,r;
if(v.size()>2)cout<<"0 0",exit(0);
else if(v.size()==1){
l=v[0],r=n;
}
else if(v.size()==0){
l=1,r=n;
}
else v[1]--,l=v[0],r=v[1];
rep(i,1,n){
if(i>=l&&i<=r)b[i]=a[r-i+l];
else b[i]=a[i];
}
rep(i,1,n)if(b[i]!=i)cout<<"0 0",exit(0);
cout<<l<<' '<<r;
}
int main(){
// freopen("test.in","r",stdin);
// freopen("test.out","w",stdout);
int T=1;
// cin>>T;
while(T--) solve();
return 0;
}