#include <bits/stdc++.h>
using namespace std;
int in;
int STEP=1,THREE=1;
int listNum[100];
void setUp(){
listNum[0]=1%in;
for(int i=1;i<100;i++){
listNum[i]=listNum[i-1]*10%in;
}
}
inline bool isOK(long long num){
int temp;
while(num!=0){
temp=num%10;
num/=10;
if(temp>1)return false;
}
return true;
}
inline bool canDone(long long num){
return !(num%in);
}
inline long long toInt(long long num){
long long ans=0;
int temp,count=0;
for(int i=62;i>=0;i--){
ans*=10;
temp=(num&(1<<i))>>i;
ans+=temp;
}
return ans;
}
inline long long toIntPlus(long long num){
long long ans=0;
int count=0;
int temp;
while(num){
temp=num&1;
num>>=1;
if(temp)ans+=listNum[count];
count++;
}
return ans%in;
}
inline bool toSkip(long long num){
int count=0;
int temp;
while(num){
temp=num&1;
num>>=1;
if(temp){
count++;
}
}
return count%THREE;
}
inline bool bitCanDonePlus(long long i){
return !toIntPlus(i);
}
inline bool bitCanDone(long long i){
return canDone(toInt(i));
}
void outNum(long long num){
bool flag=false;
int temp;
for(int i=62;i>=0;i--){
temp=(num&(1<<i))>>i;
if(temp)flag=true;
if(flag)printf("%d",temp);
}
}
void outNum2(long long num){
bool flag=false;
int temp=0;
for(int i=62;i>=0;i--){
temp*=10;
temp+=(num&(1<<i))>>i;
if(temp/in)flag=true;
if(flag){
printf("%d",temp/in);
temp=temp%in;
}
}
}
void UpGrade(){
int temp=in,temp5=1;
while(temp%2==0){
temp/=2;
STEP*=2;
}
while(temp%5==0){
temp/=5;
temp5*=2;
}
if(temp5>STEP)STEP=temp5;
while(temp%3==0){
temp/=3;
THREE*=3;
}
}
void Out(){
UpGrade();
for(long long i=0;1;i+=STEP){
if(i==0||toSkip(i))continue;
if(bitCanDonePlus(i)){
outNum2(i);
printf(" ");
outNum(i);
printf("\n");
return;
}
}
}
int main(){
cin>>in;
switch(in){
case 999:
cout<<"111222333444555666777889 111111111111111111111111111\n";
return 0;
case 9999:
cout<<"11112222333344445555666677778889 111111111111111111111111111111111111\n";
return 0;
}
setUp();
long long temp;
Out();
return 0;
}