#include<cstdio> #include<iostream> #include<cstring> #include<cstdlib> #include<cmath> #include<algorithm> #define LL long long #define s2 (sqrt(2)) using namespace std; struct big_int { int v[1000]; int len; big_int() { memset(v,0,sizeof(v)); len=0; } void mem(int b) { if(b<0) exit(-1); len=0; while(b) { v[len++]=b%10; b/=10; } } void mem(const char *s) { len=0; int ls=strlen(s); while(ls>0 && s[0]=='0') { ls--; s++; } while(len<ls) { v[len]=s[ls-len-1]-'0'; if(v[len]<0 || v[len]>9) exit(-2); len++; } } void print(const char *c="",const char *s="") { printf("%s",c); if(len==0) { printf("0%s",s); return; } for(int i=len-1;i>=0;i--) { printf("%d",v[i]); } printf("%s",s); } }; big_int operator+(big_int a,big_int b) { big_int ans; int c=0,la=0,lb=0; while(la<a.len && lb<b.len) { c=a.v[la]+b.v[lb]+c; ans.v[ans.len++]=c%10; c=c/10; la++;lb++; } while(la<a.len) { c=a.v[la]+c; ans.v[ans.len++]=c%10; c=c/10; la++; } while(lb<b.len) { c=b.v[lb]+c; ans.v[ans.len++]=c%10; c=c/10; lb++; } while(c) { ans.v[ans.len++]=c%10; c=c/10; } return ans; } big_int exp(int a,int n) { big_int ans; ans.len=n+1; ans.v[n]=a; return ans; } big_int exp(big_int a,int n) { big_int ans; ans.len=max(0,a.len+n); memcpy(ans.v+n,a.v,a.len*sizeof(int)); return ans; } big_int operator*(big_int a,int b) { big_int ans; if(a.len==0 || b==0) { ans.mem(0); return ans; } int c=0,la=0,lb=0; while(la<a.len || c>0) { c=a.v[la]*b+c; ans.v[ans.len++]=c%10; c=c/10; la++; } return ans; } big_int operator*(int a,big_int b) { return b*a; } big_int operator*(big_int a,big_int b) { big_int ans; if(a.len==0 || b.len==0) { return ans; } int len; for(len=0;len<b.len;len++) { ans=ans+exp(a*b.v[len],len); } return ans; } big_int operator^(big_int a,int b) { big_int ans,t=a; ans.mem(1); while(b) { if(b&1) ans=ans*t; t=t*t; b>>=1; } return ans; } big_int operator^(big_int a,big_int b) { big_int ans,t=a; ans.mem(1); while(b.len) { ans=ans*(t^b.v[0]); t=t^10; b=exp(b,-1); } return ans; } int main() { return 0; }