#pragma GCC optimize ("Ofast")
#include<bits/stdc++.h>
using namespace std;
template < class S> inline int vecEraseVal_L( S val1, vector< S> & a) {
int i;
int k = 0 ;
int n = a.size ( ) ;
for ( i= ( 0 ) ; i< ( n) ; i++ ) {
if ( a[ i] ! = val1) {
a[ k++ ] = a[ i] ;
}
}
i = n - k;
while ( a.size ( ) > k) {
a.pop_back ( ) ;
}
return i;
}
vector< string> Explode_L( const string & str, const string & d) {
int s = 0 ;
int i = 0 ;
int j;
vector< string> res;
while ( i + d.size ( ) - 1 < str.size ( ) ) {
for ( j= ( 0 ) ; j< ( d.size ( ) ) ; j++ ) {
if ( str[ i+ j] ! = d[ j] ) {
break ;
}
}
if ( j ! = d.size ( ) ) {
i++ ;
continue ;
}
res.push_back ( str.substr ( s, i- s) ) ;
s = ( i + = d.size ( ) ) ;
}
res.push_back ( str.substr ( s) ) ;
return res;
}
string Implode_L( const vector< string> & v, const string & d) {
int i;
string res;
if ( v.size ( ) == 0 ) {
return res;
}
res + = v[ 0 ] ;
for ( i= ( 1 ) ; i< ( v.size ( ) ) ; i++ ) {
res + = d;
res + = v[ i] ;
}
return res;
}
#define main dummy_main
int main( ) {
return 0 ;
}
#undef main
class Solution{
public :
string reorderSpaces( string s) {
int i;
int sp = 0 ;
int per;
int rem;
vector< string> word;
for ( i= ( 0 ) ; i< ( s.size ( ) ) ; i++ ) {
if ( s[ i] == ' ' ) {
sp++ ;
}
}
word = Explode_L( s, " " ) ;
vecEraseVal_L( string( "" ) , word) ;
if ( word.size ( ) > 1 ) {
per = sp / ( word.size ( ) - 1 ) ;
}
else {
per = 0 ;
}
rem = sp - per * ( word.size ( ) - 1 ) ;
return Implode_L( word, string( per, ' ' ) ) + string( rem, ' ' ) ;
}
}
;
// cLay varsion 20200920-1
// --- original code ---
// #define main dummy_main
// {}
// #undef main
//
// class Solution {
// public:
// string reorderSpaces(string s) {
// int sp = 0, per, rem;
// vector<string> word;
//
// rep(i,s.size()) if(s[i]==' ') sp++;
// word = Explode(s, " ");
// vecEraseVal(string(""), word);
//
// per = if[word.size() > 1, sp / (word.size() - 1), 0];
// rem = sp - per * (word.size() - 1);
//
// return Implode(word, string(per, ' ')) + string(rem, ' ');
// }
// };
I3ByYWdtYSBHQ0Mgb3B0aW1pemUgKCJPZmFzdCIpCiNpbmNsdWRlPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnRlbXBsYXRlPGNsYXNzIFM+IGlubGluZSBpbnQgdmVjRXJhc2VWYWxfTChTIHZhbDEsIHZlY3RvcjxTPiAmYSl7CiAgaW50IGk7CiAgaW50IGsgPSAwOwogIGludCBuID0gYS5zaXplKCk7CiAgZm9yKGk9KDApO2k8KG4pO2krKyl7CiAgICBpZihhW2ldIT12YWwxKXsKICAgICAgYVtrKytdID0gYVtpXTsKICAgIH0KICB9CiAgaSA9IG4gLSBrOwogIHdoaWxlKGEuc2l6ZSgpID4gayl7CiAgICBhLnBvcF9iYWNrKCk7CiAgfQogIHJldHVybiBpOwp9CnZlY3RvcjxzdHJpbmc+IEV4cGxvZGVfTChjb25zdCBzdHJpbmcgJnN0ciwgY29uc3Qgc3RyaW5nICZkKXsKICBpbnQgcyA9IDA7CiAgaW50IGkgPSAwOwogIGludCBqOwogIHZlY3RvcjxzdHJpbmc+IHJlczsKICB3aGlsZShpICsgZC5zaXplKCkgLSAxIDwgc3RyLnNpemUoKSl7CiAgICBmb3Ioaj0oMCk7ajwoZC5zaXplKCkpO2orKyl7CiAgICAgIGlmKHN0cltpK2pdICE9IGRbal0pewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CiAgICBpZihqICE9IGQuc2l6ZSgpKXsKICAgICAgaSsrOwogICAgICBjb250aW51ZTsKICAgIH0KICAgIHJlcy5wdXNoX2JhY2soc3RyLnN1YnN0cihzLCBpLXMpKTsKICAgIHMgPSAoaSArPSBkLnNpemUoKSk7CiAgfQogIHJlcy5wdXNoX2JhY2soc3RyLnN1YnN0cihzKSk7CiAgcmV0dXJuIHJlczsKfQpzdHJpbmcgSW1wbG9kZV9MKGNvbnN0IHZlY3RvcjxzdHJpbmc+ICZ2LCBjb25zdCBzdHJpbmcgJmQpewogIGludCBpOwogIHN0cmluZyByZXM7CiAgaWYodi5zaXplKCk9PTApewogICAgcmV0dXJuIHJlczsKICB9CiAgcmVzICs9IHZbMF07CiAgZm9yKGk9KDEpO2k8KHYuc2l6ZSgpKTtpKyspewogICAgcmVzICs9IGQ7CiAgICByZXMgKz0gdltpXTsKICB9CiAgcmV0dXJuIHJlczsKfQojZGVmaW5lIG1haW4gZHVtbXlfbWFpbgppbnQgbWFpbigpewogIHJldHVybiAwOwp9CiN1bmRlZiBtYWluCmNsYXNzIFNvbHV0aW9uewogIHB1YmxpYzoKICBzdHJpbmcgcmVvcmRlclNwYWNlcyhzdHJpbmcgcyl7CiAgICBpbnQgaTsKICAgIGludCBzcCA9IDA7CiAgICBpbnQgcGVyOwogICAgaW50IHJlbTsKICAgIHZlY3RvcjxzdHJpbmc+IHdvcmQ7CiAgICBmb3IoaT0oMCk7aTwocy5zaXplKCkpO2krKyl7CiAgICAgIGlmKHNbaV09PScgJyl7CiAgICAgICAgc3ArKzsKICAgICAgfQogICAgfQogICAgd29yZCA9RXhwbG9kZV9MKHMsICIgIik7CiAgICB2ZWNFcmFzZVZhbF9MKHN0cmluZygiIiksIHdvcmQpOwogICAgaWYod29yZC5zaXplKCkgPiAxKXsKICAgICAgcGVyID1zcCAvICh3b3JkLnNpemUoKSAtIDEpOwogICAgfQogICAgZWxzZXsKICAgICAgcGVyID0wOwogICAgfQogICAgcmVtID0gc3AgLSBwZXIgKiAod29yZC5zaXplKCkgLSAxKTsKICAgIHJldHVybiBJbXBsb2RlX0wod29yZCwgc3RyaW5nKHBlciwgJyAnKSkrIHN0cmluZyhyZW0sICcgJyk7CiAgfQp9CjsKLy8gY0xheSB2YXJzaW9uIDIwMjAwOTIwLTEKCi8vIC0tLSBvcmlnaW5hbCBjb2RlIC0tLQovLyAjZGVmaW5lIG1haW4gZHVtbXlfbWFpbgovLyB7fQovLyAjdW5kZWYgbWFpbgovLyAKLy8gY2xhc3MgU29sdXRpb24gewovLyBwdWJsaWM6Ci8vICAgc3RyaW5nIHJlb3JkZXJTcGFjZXMoc3RyaW5nIHMpIHsKLy8gICAgIGludCBzcCA9IDAsIHBlciwgcmVtOwovLyAgICAgdmVjdG9yPHN0cmluZz4gd29yZDsKLy8gICAgIAovLyAgICAgcmVwKGkscy5zaXplKCkpIGlmKHNbaV09PScgJykgc3ArKzsKLy8gICAgIHdvcmQgPSBFeHBsb2RlKHMsICIgIik7Ci8vICAgICB2ZWNFcmFzZVZhbChzdHJpbmcoIiIpLCB3b3JkKTsKLy8gCi8vICAgICBwZXIgPSBpZlt3b3JkLnNpemUoKSA+IDEsIHNwIC8gKHdvcmQuc2l6ZSgpIC0gMSksIDBdOwovLyAgICAgcmVtID0gc3AgLSBwZXIgKiAod29yZC5zaXplKCkgLSAxKTsKLy8gCi8vICAgICByZXR1cm4gSW1wbG9kZSh3b3JkLCBzdHJpbmcocGVyLCAnICcpKSArIHN0cmluZyhyZW0sICcgJyk7Ci8vICAgfQovLyB9Owo=