/*
==> Don't stop when you're tired, stop when you're done.
--> @author: MIDORIYA_
*/
//*==============================================================
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef double db;
typedef long double ld;
typedef pair<int, int> pii;
typedef vector<int> vi;
typedef vector<ll> vll;
typedef vector<db> vd;
typedef vector<ld> vld;
typedef vector<bool> vb;
typedef vector<vector<ll>> vvl;
typedef vector<pii> vii;
typedef set<int> si;
typedef set<ll> sl;
#define pb push_back
#define all(x) x.begin(), x.end()
#define rall(x) x.rbegin(), x.rend()
#define endl "\n"
const ll mod = 1'000'000'007;
#define INF 2'000'000'000
#define time cerr << "Time Taken: " << (float)clock() / CLOCKS_PER_SEC << " Secs" << endl;
//*===================>>>Fast-IO-Functions<<<=================
void fastIO()
{
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
}
//*===================>>>File-IO-Functions<<<=================
void fileIO()
{
#ifndef ONLINE_JUDGE
freopen("in.txt", "r", stdin);
freopen("out.txt", "w", stdout);
#endif
}
//*===================>>>ONE-FOR-ALL-Function<<<==============
ll mul(ll a, ll b)
{
return ((a % mod) * (b % mod)) % mod;
}
ll add(ll a, ll b)
{
return ((a % mod) + (b % mod)) % mod;
}
void OneForAll()
{
string N;
cin >> N;
string addend = "9999";
string add_res;
int carry = 0, i = N.size() - 1, j = addend.size() - 1;
while (i >= 0 || j >= 0 || carry)
{
ll digitN = (i >= 0) ? N[i] - '0' : 0;
ll digitA = (j >= 0) ? addend[j] - '0' : 0;
ll sum = add(digitN, add(digitA, carry));
add_res += char(sum % 10 + '0');
carry = sum / 10;
i--;
j--;
}
reverse(all(add_res));
cout << add_res << endl;
string mul_res(N.size() + addend.size(), '0');
for (int k = N.size() - 1; k >= 0; --k)
{
int carry = 0;
ll n_digit = N[k] - '0';
for (int l = addend.size() - 1; l >= 0; --l)
{
ll m_digit = addend[l] - '0';
int pos = k + l + 1;
ll prod = add(mul_res[pos] - '0', mul(n_digit, m_digit));
prod = add(prod, carry);
mul_res[pos] = char(prod % 10 + '0');
carry = prod / 10;
}
int pos = k;
ll sum = add(mul_res[pos] - '0', carry);
mul_res[pos] = char(sum % 10 + '0');
carry = sum / 10;
}
while (mul_res.size() > 1 && mul_res[0] == '0')
mul_res.erase(mul_res.begin());
cout << mul_res << endl;
}
int main()
{
fastIO();
fileIO();
ll tc = 1;
// cin >> tc;
while (tc--)
{
OneForAll();
}
time;
return 0;
}
// fibonacci series -> 0 1 1 2 3 5 8 13 21 34 ...
// factorial series -> 1 1 2 6 24 120 720 ...