#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define ll long long #define m0(a) memset(a, 0, sizeof(a)) #define m1(a) memset(a, -1, sizeof(a)) #define C1(x) cout<(y)?(y):(x)) #define max(x,y) ((x)>(y)?(x):(y)) #define r() (rand()/(double)(RAND_MAX)) struct stu { int x,y,z; bool operator < (const stu &b) const { return xlb?la:lb; for(int i=0;i=0;i--) ans+=na[i]+'0'; return ans; } long long extend_gcd(long long a,long long b,long long &x,long long &y) { if(a==0&&b==0) return -1;//无最大公约数 if(b==0){x=1;y=0;return a;} long long d=extend_gcd(b,a%b,y,x); y-=a/b*x; return d; } long long mod_reverse(long long a,long long n)//MOD n { long long x,y; long long d=extend_gcd(a,n,x,y); if(d==1) return (x%n+n)%n; else return 0; } int main () { srand((unsigned)time(NULL)); #ifdef ONLINE_JUDGE #else //freopen("in.in","r",stdin); //freopen("in.out","w",stdout); #endif int cas; while (scanf("%d",&n)!=EOF) { getchar(); gets(a); l=strlen(a); b[0]=(a[0]-28)%M; for (int i=1;iy) swap(x,y); ans=1; if (x>=2) ans=( b[y-1] * mod_reverse(b[x-2],M))%M; else if (x==1)ans=(b[y-1])%M; C1(ans); num=ans; } } } /* scanf("%d",&cas); for (int casi=1;casi<=cas;casi++) { //scanf("%d",&n); printf("%d\n",casi); }*/ return 0; }