#include <bits/stdc++.h>
const double PI = acos(-1.0);
const double e = exp(1.0);
const int INF = 0x7fffffff;
;
template <class T>
T gcd(T a, T b) {
  return b ? gcd(b, a % b) : a;
}
template <class T>
T lcm(T a, T b) {
  return a / gcd(a, b) * b;
}
template <class T>
inline T Min(T a, T b) {
  return a < b ? a : b;
}
template <class T>
inline T Max(T a, T b) {
  return a > b ? a : b;
}
bool cmpbig(int a, int b) { return a > b; }
bool cmpsmall(int a, int b) { return a < b; }
using namespace std;
int main() {
  char s[30];
  while (~scanf("%s", s)) {
    int vis[30];
    memset(vis, 0, sizeof(vis));
    for (int i = 0; i < 27; i++) vis[s[i] - 'A']++;
    int flag = 0;
    for (int i = 1; i < 27; i++)
      if (s[i] == s[i - 1]) {
        flag = 1;
        break;
      }
    if (flag) {
      printf("Impossible\n");
      continue;
    }
    int flag1 = -1, flag2 = 0;
    for (int i = 0; i < 27; i++) {
      if (vis[s[i] - 'A'] == 2) {
        if (flag1 == -1)
          flag1 = i;
        else
          flag2 = i;
      }
    }
    int num = flag2 - flag1 - 1;
    int up = num / 2 + 1;
    if (flag1 + up >= 13) {
      for (int i = flag1 + up - 13; i < flag1 + up; i++) printf("%c", s[i]);
      printf("\n");
      for (int i = flag1 + up - 14; i >= 0; i--) printf("%c", s[i]);
      for (int i = 26; i >= flag1 + up; i--)
        if (vis[s[i] - 'A'] != 2) printf("%c", s[i]);
      printf("\n");
    } else {
      for (int i = 27 - (13 - flag1 - up); i < 27; i++) printf("%c", s[i]);
      for (int i = 0; i < flag1 + up; i++) printf("%c", s[i]);
      printf("\n");
      for (int i = 26 - (13 - flag1 - up); i >= flag1 + up; i--)
        if (vis[s[i] - 'A'] != 2) printf("%c", s[i]);
      printf("\n");
    }
  }
  return 0;
}
