#include using namespace std; #define int long long #define app push_back #define all(x) (x).begin(),(x).end() #ifdef LOCAL #define debug(...) [](auto...a){ ((cout << a << ' '), ...) << endl;}(#__VA_ARGS__, ":", __VA_ARGS__) #else #define debug(...) #endif #ifdef LOCAL #define __int128 long long #endif // LOCAL const int inf=1e18; const int maxn=2e5+5; int a[maxn];int col[maxn];bool used[maxn];int h[maxn];int de[maxn];int u[maxn][20];bool cy[maxn];int di[maxn]; int me[maxn]; int mo[maxn]; int f[maxn]; vector ps; vector mem[maxn]; int32_t main() { ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); int n,l,r;cin>>n>>l>>r; set unu; f[0]=0;fill(f+1,f+maxn,inf); for(int i=0;i<=n;++i) { for(int j=l;j<=r;++j) { f[i+j]=min(f[i+j],f[i]+1); } } for(int i=1;i<=n;++i) {cin>>a[i];u[i][0]=a[i];} for(int j=1;j<20;++j) {for(int i=1;i<=n;++i) {u[i][j]=u[u[i][j-1]][j-1];}} for(int i=1;i<=n;++i) {cy[u[i][19]]=true;} for(int i=1;i<=n;++i) { if(cy[i] && !used[i]) { int x=i;int c=0; while(true) { col[x]=i; h[x]=c; ++c; x=a[x]; if(x==i) break; } de[i]=c; ps.app(de[i]); } } for(int i=1;i<=n;++i) { if(cy[i]) {me[i]=i;continue;} di[i]=0; int x=i; for(int j=19;j>=0;--j) { if(!cy[u[x][j]]) { di[i]+=(1<bool { return ((l+2*p-1-x)/p!=(r+2*p-x)/p); }; for(int p:ps) { vector ans(mo[p]+p+1);fill(all(ans),inf);ans[0]=0; for(int k=0;k=ans.size()) x-=p; ans[x]=min(ans[x],ans[i]+1); } } } for(int i=0;i=0;--i) { if(h & (1<>q1; while(q1--) { int x,y;cin>>x>>y; if(col[me[x]]!=col[me[y]]) { cout<<(-1)<<'\n'; continue; } if(!cy[y]) { if(me[x]!=me[y] || di[x]=0;--i) { if(o-p*(1<=((int) (mem[p].size()))) {o-=p*(1<