#include<bits/stdc++.h>
using namespace std;
bool is_sushu(int k)
{
for(int i=2;i<=sqrt(k);i++)
{
if(k%i==0){return false;}
}
return true;
}
vector<int> get_sushu(vector<int>&sushu)
{ int i=2;
while(sushu.size()<25)
{
if(is_sushu(i)){
sushu.push_back(i);
}
i++;
}
return sushu;
}
void getnum(vector<int>&numA,string A)
{ int i=0;
string tmp;
while(i<A.size())
{
if(A[i]!=',')
{tmp+=A[i];
//最后一位数字记得放进vector
if(i==A.size()-1){
numA.push_back(atoi(tmp.c_str()));
//cout<<tmp<<" ";
}
}
else if(A[i]==',')
{
numA.push_back(atoi(tmp.c_str()));
//cout<<tmp<<" ";
tmp.clear();
}
i++;
}
return ;
}
string merge(string A,string B,vector<int>sushu)
{
string ans;
vector<int>numA;
vector<int>numB;
getnum(numA,A);
reverse(numA.begin(),numA.end());
getnum(numB,B);
reverse(numB.begin(),numB.end());
int minlen=min(numA.size(),numB.size());
int upup=0;
for(int i=0;i<minlen;i++)
{
int tmp=numA[i]+numB[i]+upup;
upup=0;
if(tmp>=sushu[i]){
upup=1;
tmp=tmp%sushu[i];
}
ans+=to_string(tmp);
ans+=',';
}
if(numA.size()>minlen)
{
for(int i=minlen;i<numA.size();i++){
int tmp=numA[i]+upup;
upup=0;
if(tmp>=sushu[i]){
upup=1;
tmp=tmp%sushu[i];
}
ans+=to_string(tmp);
ans+=',';
}
}
else if(numB.size()>minlen)
{ for(int i=minlen;i<numB.size();i++)
{
int tmp=numB[i]+upup;
upup=0;
if(tmp>=sushu[i]){
upup=1;
tmp=tmp%sushu[i];
}
ans+=to_string(tmp);
ans+=',';
}
}
if (upup==1)
{
ans+=upup+'0';
ans+=',';
}
vector<int>numans;
getnum(numans,ans);
reverse(numans.begin(),numans.end());
ans.clear();
for(int i=0;i<numans.size();i++)
{
if(i==numans.size()-1)
{cout<<numans[i];break;}
cout<<numans[i]<<",";
}
return ans;
}
int main()
{
vector<int>sushu;
sushu=get_sushu(sushu);//先获得前25位素数
string A,B;
while(cin>>A>>B)//(getline(cin,line));
{
if(A=="0"||B=="0"){break;}
string ans=merge(A,B,sushu);
}
return 0;
}