///GH The RATS class
#include "std_lib_facilities.h"

// A helper function for the Rats class that takes a number and returnes its RATS value.
unsigned ras(unsigned n) {
    vector<unsigned> digits;
    unsigned numCopy = n;
    while(numCopy!=0) {
        digits.push_back(numCopy%10);
        numCopy /= 10;
    }
    unsigned nReverse = 0, pow10 =1;
    for(int i = digits.size()-1; i >= 0; --i) {
        nReverse += digits[i]*pow10;
        pow10 *= 10;
    }
    n += nReverse;
    digits.clear();
    while(n!=0) {
        digits.push_back(n%10);
        n /= 10;
    }
    sort(digits.begin(),digits.end());
    reverse(digits.begin(),digits.end());
    n = 0; pow10 =1;
    for(int i = digits.size()-1; i >= 0; --i) {
        n += digits[i]*pow10;
        pow10 *= 10;
    }
    return n;
}

class Rats
{
    public:
        Rats();
        Rats(unsigned s);
        vector<unsigned> ratSeq;
        unsigned seed;
        void showRats();
};

Rats::Rats()
{
    ///ctor
}

Rats::Rats(unsigned s) : seed(s) {
    ratSeq.push_back(seed);
    for(int i = 0; i < 500; ++i) {
        ratSeq.push_back(ras(ratSeq[i]));
    }
}

void Rats::showRats() {
    for(int i = 0; i < ratSeq.size()-1; ++i) {
        cout << ratSeq[i] << ", ";
        if((i+1)%6 == 0) cout << endl;
    }
    cout << " " << ratSeq[ratSeq.size()-1];
}

/**Rats::~Rats()
{
    ///dtor
}*/
