Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- typedef long long ll;
- typedef long double ld;
- #define ipow(a,b)+0.5 (int)pow(a,b)
- #define pb push_back
- #define mp make_pair
- #define mod 1000000007
- #define fi first
- #define se second
- #define rep(i,n) for(int i=0;i<n;i++)
- #define reps(i,a,b) for(int i=a;i<=b;i++)
- string s;
- bool vis[100005]={false};
- int b[100005];
- multiset<int>re;
- map<int,int>ret;
- vector<int>store[100005];
- multiset<int>rem[3];
- class Task
- {
- public:
- void solve(istream& in,ostream& out)
- {
- in>>s;
- ll S=sum();
- int n=s.length();
- bool flag=false;
- int y=0;
- rep(i,n)
- {
- b[i]=s[i]-48;
- if(ret.find(b[i])==ret.end())
- {
- ret.insert(mp(b[i],y));
- store[y].push_back(i);
- y++;
- }
- else
- {
- int k=(*ret.find(b[i])).se;
- store[k].pb(i);
- }
- }
- sort(b,b+n);
- int store=-182;
- if(S%3==0)
- out<<s;
- else
- {
- for(int i=0;i<n;i++)
- {
- if(b[i]%3==0)
- rem[0].insert(b[i]);
- else if (b[i]%3==1)
- rem[1].insert(b[i]);
- else
- rem[2].insert(b[i]);
- }
- if(S%3==1)
- {
- if(rem[1].size()>0)
- {
- re.insert(*rem[1].begin());
- flag=true;
- }
- }
- else if (S%3==2)
- {
- if(rem[2].size()>0)
- {
- re.insert(*rem[2].begin());
- flag=true;
- }
- else if (rem[1].size()>=2)
- {
- re.insert(*rem[1].begin());
- re.insert(*next(rem[1].begin()));
- flag=true;
- }
- }
- if(!flag)
- out<<-1<<endl;
- else
- {
- if(re.size()==1)
- {
- auto it = re.begin();
- int k=(*ret.find(*it)).se;
- int c1=store[k][0];
- vis[c1]=true;
- }
- else
- {
- auto it=re.begin();
- if(*it==(*next(it)))
- {
- auto it = re.begin();
- int k=(*ret.find(*it)).se;
- vis[store[k][0]]=true;
- vis[store[k][1]]=true;
- }
- }
- leading(n);
- for(int i=0;i<n;i++)
- {
- if(!vis[i])
- out<<s[i];
- }
- out<<endl;
- }
- }
- }
- void leading(int n)
- {
- if(vis[0]==false)
- return ;
- else
- {
- reps(i,1,n-1)
- {
- if(s[i]=='0')
- vis[i]=true;
- else
- break;
- }
- }
- }
- ll sum()
- {
- ll res=0;
- int n=s.length();
- rep(i,n)
- {
- res+=s[i]-48;
- }
- return res;
- }
- };
- int main()
- {
- ios_base::sync_with_stdio(false);
- cin.tie(NULL);
- cout.tie(NULL);
- Task solver;
- std::istream& in(std::cin);
- std::ostream& out(std::cout);
- solver.solve(in,out);
- out.flush();
- return 0;
- }
Add Comment
Please, Sign In to add comment