//s[x]=s[y] 构造:则保证x与x-1,x+1,y-1,y+1相邻,其他的元素按照原来顺序放即可;
// ..x开始顺势针放 dif/2 保证s[y-1]和s[x]相邻 (两行末尾为s[x]~s[dif/2],, s[y-1]~s[dif/2+1])
//s[y+1]~s[len-1] s[0]~s[x-1]连成一串 取0~12-dif/2,放到s[x]之前即可(y+1,s[x]相邻),
//剩下@~s[x-1]放到第二行即可
#include <set>
#include <map>
#include <queue>
#include <stack>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
typedef long long ll;
const int N=27;
char s[N+20];
int main()
{
scanf("%s",s);
int len=strlen(s);
int x,y,z;//两个相同字符把字符串分成3段
for(int i=0;i<len-1;i++)//长度27,26种字符每种至少出现一次,有一种字符肯定出现两次
{
for(int j=i+1;j<len;j++)
{
if(s[i]==s[j])
{
x=i;
y=j;
if(x+1==y)//两个相同的靠在一起
{
cout<<"Impossible"<<endl;
return 0;
}
}
}
}
//s[x]=s[y] 构造:则保证x与x-1,x+1,y-1,y+1相邻,其他的元素按照原来顺序放即可;
// ..x开始顺势针放 分成3短 0~x-1 x~y-1 y+1~len
int dif=y-x-1;
string q="";//第一行
string w="";//第二行
string t="";
q=q+s[x];
// dif/2 保证s[y-1]和s[x]相邻
for(int i=1;i<=dif/2;i++)
{
q=q+s[x+i];//x~y之间前半部分放第一行
}
for(int i=dif/2+1;i<=dif;i++)
{
w=s[x+i]+w; //x~y后半部分 从第二行末尾倒着放(s[dif/2],s[dif/2+1]上下相邻)
}
for(int i=y+1;s[i];i++)
{
t=t+s[i];
}
for(int i=0;i<x;i++)
{
t=t+s[i];//0~x-1
}
string t1=t.substr(0,12-dif/2);
string t2=t.substr(12-dif/2,t.length()-(12-dif/2));
reverse(t1.begin(),t1.end());//y+1要在x相邻
q=t1+q;
w=t2+w;
cout<<q<<endl;
cout<<w<<endl;
return 0;
}