// G. Hagopian--variabtions on collatz iteration

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int64_t coll(int64_t x) {
	return x % 2 == 0 ? x / 2 : (3 * x + 1) / 2;
}

int64_t variation01(int64_t x) {
	if (x % 3 == 2) return 5 * (x + 1) / 3;
	if (x % 3 == 1) return 2*(x + 2) / 3;
	return 2 * x / 3;
}

bool repeat(vector<int64_t> v) {
	if (v.size() > 2) {
		sort(v.begin(), v.end());
		for (int i = 0; i < v.size() - 1; ++i)
			if (v[i] == v[i + 1]) return true;
	}
	return false;
}

bool repeat2(vector<int64_t> v, int64_t x) {
	for (int64_t i : v) if (x == i) 
		return true;
	return false;
}

vector<int64_t> findRepetend(vector<int64_t> v) {
	int i = 0; 
	for (; v[i] != v[v.size() - 1]; ++i);
	vector<int64_t> repetend;
	++i;
	for (; i < v.size(); ++i)
		repetend.push_back(v[i]);
	return repetend;
}

int main() {
	vector<int64_t> sequence, repetend;
	int64_t x;
	cout << "Enter a number to see the variation01 sequence: ";
	while (1) {
		sequence.clear();
		repetend.clear();
		cin >> x;
		sequence.push_back(x);
		bool loop = true;
		while (loop) {
			//cin.get();
			x = variation01(x);
			if (repeat2(sequence, x))
				loop = false;
			sequence.push_back(x);
			//cout << x << " ";
		}
		cout << "The whole sequence is ";
		for (int64_t i : sequence) cout << i << " ";
		cout << "\nThe repeating part is ";
		repetend = findRepetend(sequence);
		for (int64_t i : repetend) cout << i << " ";
		cout << "\nEnter a number to see the variation01 sequence: ";
	}
}