#pragma region header #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include // =============================================================== //using系 #pragma region header using namespace std; using ll = long long; using vl = vector; using vvl = vector>; using vvi = vector>; using Graph = vvi; using vs = vector; using vc = vector; using vcc = vector>; using vm = vector; using vmm = vector>; using pii = pair; using psi = pair; using ld = long double; using ull = unsigned long long; using ui = unsigned int; using qul = queue; using pql = priority_queue; using kaage = priority_queue, greater>; int dx[] = { 1,0,-1,0 }; int dy[] = { 0,1,0,-1 }; constexpr ll mod = 1e9 + 7; #pragma endregion // ======================================================================== //define系 //#define int long long #define rep(i, n) for(ll i = 0; i < n; i++) #define REP(i, n) for(ll i = 1; i <= n; i++) // ======================================================================== #pragma region header ll gcd(ll a, ll b) { if (a % b == 0) { return(b); } else { return(gcd(b, a % b)); } } //最大公約数 ll lcm(ll a, ll b) { return a * b / gcd(a, b); } //最小公倍数 ll box(double a) { ll b = a; return b; } //切り捨て ll fff(double a) { ll b = a + 0.5; return b; } //四捨五入 ll mch(ll n) { if (n == 1) return 1; else return n * mch(n - 1); } //1から整数nまでの階乗を出す(INFで割っていない) bool prime(ll a)//素数判定、primeならtrue,違うならfalse { if (a < 2) return false; else if (a == 2) return true; else if (a % 2 == 0) return false; double m = sqrt(a); for (int i = 3; i <= m; i += 2) { if (a % i == 0) { return false; } } // 素数である return true; } //素数判定 ll modpow(ll a, ll n, ll mod) { ll hi = 1; while (n > 0) { if (n & 1) hi = hi * a % mod; a = a * a % mod; n >>= 1; } return hi; } //いろいろやります(ただの前座) ll mg(ll a, ll mod) { return modpow(a, mod - 2, mod); } //割り算の10^9+7等対策で逆元を出します #pragma endregion #pragma endregion // ======================================================================== #pragma region header //ある程度のテンプレ(いじって使う) //これとBFS、あとその時その時で使うものはここに書く vector seens; void dfs(const Graph& G, int v) { seens[v] = true; // v を訪問済にする // v から行ける各頂点 next_v について for (auto next_v : G[v]) { if (seens[next_v]) continue; // next_v が探索済だったらスルー dfs(G, next_v); // 再帰的に探索 } } // ======================================================================== #pragma endregion /*signed*/ int main() { ll n; cin >> n; vl a(100); a[0] = n; ll cnt = 0; for (int i = 1; i < 100; i++) { string s = to_string(a[i - 1]); ll sum = 0; for (int j = 0; j < s.size(); ++j) { sum += s[j] - '0'; } a[i] = sum; } cout << a[99] << endl; return 0; }