倍增
#include<bits/stdc++.h>
#define il inline
#define ri register int
#define ru register unsigned int
#define int long long
using namespace std;
const int MOD=19260817;
il int read()
{
int as=0;char ch=getchar();
while(ch<'0'||ch>'9') ch=getchar();倍增
#include<bits/stdc++.h>
#define il inline
#define ri register int
#define ru register unsigned int
using namespace std;
const int maxn=5e5+2;
int dep[maxn],path[maxn][21],head[maxn],tot;
//path[i][j]存[i]向上走2的j次方那么长的路径
struct Node{int to,nxt;}edge[maxn<<1];
il int read()
{
int as=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9') {if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9') as=(as<<3)+(as<<1)+(ch^48),ch=getchar();
return as*f;
}
il void wt(int x){if(x>9) wt(x/10);putchar(x%10+48);}
il void add(int u,int v){edge[++tot].to=v,edge[tot].nxt=head[u],head[u]=tot;}
il void dfs(int u,int fa)
{
dep[u]=dep[fa]+1,path[u][0]=fa;
for(ri i=1;(1<<i)<=dep[u];++i)
path[u][i]=path[path[u][i-1]][i-1];
for(ri i=head[u];i;i=edge[i].nxt)
if(edge[i].to!=fa) dfs(edge[i].to,u);
}
il int lca(int a,int b)
{
if(dep[a]>dep[b]) a=a^b,b=a^b,a=a^b;//dep[a] < dep[b]
for(ri i=20;i>=0;--i)
if(dep[a]<=dep[b]-(1<<i)) b=path[b][i];
if(a==b) return a;
for(ri i=20;i>=0;--i)
if(path[a][i]==path[b][i]) continue;
else a=path[a][i],b=path[b][i];
return path[a][0];
}
int n,m,rt,u,v;
int main()
{
n=read(),m=read(),rt=read();
for(ri i=1;i<=n-1;++i)
u=read(),v=read(),add(u,v),add(v,u);
dfs(rt,0);
for(ri i=1;i<=m;++i)
wt(lca(read(),read())),putchar('\n');
return 0;
}
//……
while(ch>='0'&&ch<='9') as=(as<<3)+(as<<1)+(ch^48),as%=MOD,ch=getchar();
return as%MOD;
}
il int exgcd(int a,int b,int &x,int &y)
{
if(b==0) return x=1,y=0,a;
int g=exgcd(b,a%b,y,x);y-=a/b*x;return g;
}
int a,b,x,y;
signed main()
{
a=read(),b=read();
if(!b) return printf("Angry!"),0;
int tmp=exgcd(b,MOD,x,y);
if(a%tmp!=0) printf("Angry!");
else printf("%lld",(a*x%MOD+MOD)%MOD);
return 0;
}