#include <cstdio>
#define DMax 50
#define NMax 80
using namespace std;
struct bigint{
int a[DMax];
bigint(){
for (int i=0;i<DMax;i++)a[i]=0;
}
void set(int x){
for (int i=0;i<DMax;i++){
a[i]=x%10;
x/=10;
}
}
bigint operator*(int x)const{
bigint r;
int s=0;
for (int i=0;i<DMax;i++){
s+=a[i]*x;
r.a[i]=s%10;
s/=10;
}
return r;
}
bigint operator+(int x)const{
bigint r;
for (int i=0;i<DMax;i++){
x+=a[i];
r.a[i]=x%10;
x/=10;
}
return r;
}
bool operator<(const bigint &b)const{
for (int i=DMax-1;i>=0;i--){
if (a[i]<b.a[i])return true;
if (b.a[i]<a[i])return false;
}
return false;
}
void print(FILE *fout){
int l;
for (l=DMax-1;l>0 && a[l]==0;l--);
for (int i=l;i>=0;i--)fprintf(fout,"%d",a[i]);
}
bigint operator+(const bigint &b)const{
bigint r;
int s=0;
for (int i=0;i<DMax;i++){
#define DMax 50
#define NMax 80
using namespace std;
struct bigint{
int a[DMax];
bigint(){
for (int i=0;i<DMax;i++)a[i]=0;
}
void set(int x){
for (int i=0;i<DMax;i++){
a[i]=x%10;
x/=10;
}
}
bigint operator*(int x)const{
bigint r;
int s=0;
for (int i=0;i<DMax;i++){
s+=a[i]*x;
r.a[i]=s%10;
s/=10;
}
return r;
}
bigint operator+(int x)const{
bigint r;
for (int i=0;i<DMax;i++){
x+=a[i];
r.a[i]=x%10;
x/=10;
}
return r;
}
bool operator<(const bigint &b)const{
for (int i=DMax-1;i>=0;i--){
if (a[i]<b.a[i])return true;
if (b.a[i]<a[i])return false;
}
return false;
}
void print(FILE *fout){
int l;
for (l=DMax-1;l>0 && a[l]==0;l--);
for (int i=l;i>=0;i--)fprintf(fout,"%d",a[i]);
}
bigint operator+(const bigint &b)const{
bigint r;
int s=0;
for (int i=0;i<DMax;i++){