Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- int dirx[8]={0,0,1,-1,1,1,-1,-1};
- int diry[8]={1,-1,0,0,1,-1,1,-1};
- #define ll long long
- #define sc1(a) scanf("%d",&a)
- #define llsc1(a) scanf("%lld",&a)
- #define sc2(a,b) scanf("%d %d",&a,&b)
- #define llsc2(a,b) scanf("%lld %lld",&a,&b)
- #define sc3(a,b,c) scanf("%d %d %d",&a,&b,&c)
- #define llsc3(a,b,c) scanf("%lld %lld %lld",&a,&b,&c)
- #define min3(a,b,c) min(a,min(b,c))
- #define max3(a,b,c) max(a,max(b,c))
- #define pf printf
- #define cpfl(s) cout<<s<<endl
- #define cpf(s) cout<<s
- #define FOR(a) for(ll i=0;i<a;i++)
- #define inf 2e9
- #define pr pair<int,int>
- #define mpp make_pair
- #define pi acos(-1)
- #define all(a) a.begin(),a.end()
- #define newline pf("\n")
- #define mem(a,b) memset(a,b,sizeof(a))
- #define srt(a,n) sort(a,a+n)
- #define mx 100005
- #define mm 1420
- #define mod 1000000007
- #define frd freopen("input.txt","r",stdin)
- #define fpf freopen("output.txt","w",stdout)
- int gans,found,ar[15],br[15];
- int one(string s)
- {
- int ans=0;
- for(int i=0;i<s.length();i++)ans+=s[i]-'0';
- return ans;
- }
- int two(string s)
- {
- int ans=0,i=0;
- if(s.length()%2!=0){
- ans+=s[i]-'0';
- i++;
- }
- for(;i<s.length();i+=2){
- int t=s[i]-'0';
- t*=10;
- t+=s[i+1]-'0';
- ans+=t;
- }
- return ans;
- }
- int three(string s)
- {
- int ans=0,i=0;
- if(s.length()%3==1){
- ans+=s[i]-'0';
- i++;
- }
- else if(s.length()%3==2){
- ans+=s[i]-'0';
- ans*=10;
- ans+=s[i+1]-'0';
- i+=2;
- }
- for(;i<s.length();i+=3){
- int t=s[i]-'0';
- t*=10;
- t+=s[i+1]-'0';
- t*=10;
- t+=s[i+2]-'0';
- ans+=t;
- }
- return ans;
- }
- void printone(string s)
- {
- cpf(s[0]);
- for(int i=1;i<s.length();i++)cpf("+"<<s[i]);
- newline;
- }
- void printtwo(string s)
- {
- int len=s.length(),i=0;
- if(len%2!=0){
- cpf(s[0]);
- i++;
- }
- else{
- cpf(s[0]<<s[1]);
- i=2;
- }
- for(;i<len;i+=2)cpf("+"<<s[i]<<s[i+1]);
- newline;
- }
- void printthree(string s)
- {
- int len=s.length(),i=0;
- if(len%3==1){
- cpf(s[i]);
- i++;
- }
- else if(len%3==2){
- cpf(s[i]<<s[i+1]);
- i+=2;
- }
- else{
- cpf(s[i]<<s[i+1]<<s[i+2]);
- i+=3;
- }
- for(;i<len;i+=3)cpf("+"<<s[i]<<s[i+1]<<s[i+2]);
- newline;
- }
- int four(string s)
- {
- int len=s.length(),ans=0,i=0;
- if(len%4==1){
- ans+=s[i]-'0';
- i++;
- }
- else if(len%4==2){
- int t=s[i]-'0';
- t*=10;t+=s[i+1]-'0';
- ans+=t;
- i+=2;
- }
- else if(len%4==3){
- int t=s[i]-'0';
- t*=10;t+=s[i+1]-'0';
- t*=10;t+=s[i+2]-'0';
- ans+=t;
- i+=3;
- }
- for(;i<len;i+=4){
- int t=s[i]-'0';
- t*=10;t+=s[i+1]-'0';
- t*=10;t+=s[i+2]-'0';
- t*=10;t+=s[i+3]-'0';
- ans+=t;
- }
- return ans;
- }
- void printfour(string s)
- {
- int len=s.length(),i=0;
- if(len%4==1){
- cpf(s[i]);
- i++;
- }
- else if(len%4==2){
- cpf(s[i]<<s[i+1]);
- i+=2;
- }
- else if(len%4==3){
- cpf(s[i]<<s[i+1]<<s[i+2]);
- i+=3;
- }
- else {
- cpf(s[i]<<s[i+1]<<s[i+2]<<s[i+3]);
- i+=4;
- }
- for(;i<len;i+=4)cpf("+"<<s[i]<<s[i+1]<<s[i+2]<<s[i+3]);
- newline;
- }
- int five(string s)
- {
- int len=s.length(),ans=0,i=0;
- if(len%5==1){
- ans+=s[i]-'0';
- i++;
- }
- else if(len%5==2){
- int t=s[i]-'0';
- t*=10;t+=s[i+1]-'0';
- ans+=t;
- i+=2;
- }
- else if(len%5==3){
- int t=s[i]-'0';
- t*=10;t+=s[i+1]-'0';
- t*=10;t+=s[i+2]-'0';
- ans+=t;
- i+=3;
- }
- else if(len%5==4){
- int t=s[i]-'0';
- t*=10;t+=s[i+1]-'0';
- t*=10;t+=s[i+2]-'0';
- t*=10;t+=s[i+3]-'0';
- ans+=t;
- i+=4;
- }
- for(;i<len;i+=5){
- int t=s[i]-'0';
- t*=10;t+=s[i+1]-'0';
- t*=10;t+=s[i+2]-'0';
- t*=10;t+=s[i+3]-'0';
- t*=10;t+=s[i+4]-'0';
- ans+=t;
- }
- return ans;
- }
- void printfive(string s)
- {
- int len=s.length(),i=0;
- if(len%5==1){
- cpf(s[i]);
- i++;
- }
- else if(len%5==2){
- cpf(s[i]<<s[i+1]);
- i+=2;
- }
- else if(len%5==3){
- cpf(s[i]<<s[i+1]<<s[i+2]);
- i+=3;
- }
- else if(len%5==4){
- cpf(s[i]<<s[i+1]<<s[i+2]<<s[i+3]);
- i+=4;
- }
- else {
- cpf(s[i]<<s[i+1]<<s[i+2]<<s[i+3]<<s[i+4]);
- i+=5;
- }
- for(;i<len;i+=5)cpf("+"<<s[i]<<s[i+1]<<s[i+2]<<s[i+3]<<s[i+4]);
- newline;
- }
- void printback(string s)
- {
- int len=s.length(),f=0;
- for(int i=0;i<len;i++){
- int t=br[i];
- if(t==1){
- if(!f){
- cpf(s[i]);
- f=1;
- }
- else cpf("+"<<s[i]);
- }
- else if(t==2){
- if(!f){
- cpf(s[i]<<s[i+1]);
- f=1;
- }
- else cpf("+"<<s[i]<<s[i+1]);
- i++;
- }
- else{
- if(!f){
- cpf(s[i]<<s[i+1]<<s[i+2]);
- f=1;
- }
- else cpf("+"<<s[i]<<s[i+1]<<s[i+2]);
- i+=2;
- }
- }
- newline;
- }
- int digitSum(int n)
- {
- int ans=0;
- while(n!=0){
- ans+=(n%10);
- n/=10;
- }
- return ans;
- }
- void backtrack(int i,int num,int n,string s)
- {
- if(found)return ;
- if(i>=n){
- if(digitSum(num)<10){
- gans=num;
- for(int j=0;j<n;j++)br[j]=ar[j];
- found=1;
- }
- return ;
- }
- ar[i]=1;
- backtrack(i+1,num+(s[i]-'0'),n,s);
- if(i+1<n){
- int t=s[i]-'0';
- t*=10;
- t+=s[i+1]-'0';
- ar[i]=2;
- ar[i+1]=2;
- backtrack(i+2,num+t,n,s);
- }
- if(i+2<n){
- int t=s[i]-'0';
- t*=10;
- t+=s[i+1]-'0';
- t*=10;
- t+=s[i+2]-'0';
- ar[i]=3;
- ar[i+1]=3;
- ar[i+2]=3;
- backtrack(i+3,num+t,n,s);
- }
- }
- string tostring(int n)
- {
- if(!n)return "0";
- string ans="";
- while(n!=0){
- ans+=(n%10)+'0';
- n/=10;
- }
- reverse(ans.begin(),ans.end());
- return ans;
- }
- void solve(string s)
- {
- int t=one(s);
- string tt=tostring(t);
- backtrack(0,0,tt.length(),tt);
- if(found){
- printone(s);
- printback(tt);
- tt=tostring(gans);
- printone(tt);
- return ;
- }
- found=0;
- t=two(s);
- tt=tostring(t);
- backtrack(0,0,tt.length(),tt);
- if(found){
- printtwo(s);
- printback(tt);
- tt=tostring(gans);
- printone(tt);
- return ;
- }
- found=0;
- t=three(s);
- tt=tostring(t);
- backtrack(0,0,tt.length(),tt);
- if(found){
- printthree(s);
- printback(tt);
- tt=tostring(gans);
- printone(tt);
- return ;
- }
- found=0;
- t=four(s);
- tt=tostring(t);
- backtrack(0,0,tt.length(),tt);
- if(found){
- printfour(s);
- printback(tt);
- tt=tostring(gans);
- printone(tt);
- return ;
- }
- found=0;
- t=five(s);
- tt=tostring(t);
- backtrack(0,0,tt.length(),tt);
- if(found){
- printfive(s);
- printback(tt);
- tt=tostring(gans);
- printone(tt);
- return ;
- }
- }
- int main()
- {
- //frd;
- //fpf;
- //cpfl(four("1111112"));return 0;
- int n;
- string s;
- cin>>n>>s;
- solve(s);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement