#include <bits/stdc++.h>
using namespace std;
string s;
int freq[30];
char grid[2][14];
int dr[] = {1, -1, 0, 0, -1, -1, 1, 1};
int dc[] = {0, 0, 1, -1, -1, 1, -1, 1};
bool valid(int r, int c) { return (0 <= r && r <= 1) && (0 <= c && c <= 12); }
bool isValid() {
  int r, c;
  for (int i = 0; i < 2; i++) {
    for (int j = 0; j < 13; j++) {
      if (grid[i][j] == s[0]) {
        r = i;
        c = j;
        break;
      }
    }
  }
  for (int i = 0; i < 25; i++) {
    char nxt = s[i + 1];
    bool flag = false;
    for (int dir = 0; dir < 8; dir++) {
      int rr = r + dr[dir];
      int cc = c + dc[dir];
      if (valid(rr, cc)) {
        if (grid[rr][cc] == nxt) {
          r = rr;
          c = cc;
          flag = true;
          break;
        }
      }
    }
    if (!flag) {
      return false;
    }
  }
  return true;
}
int main() {
  int Case = 1;
  int n, m, k;
  char dump[2];
  while (getline(cin, s)) {
    memset(freq, 0, sizeof(freq));
    char db;
    int pos = 0;
    for (int i = 0; i < s.size(); i++) {
      freq[s[i] - 65]++;
      if (freq[s[i] - 65] == 2) {
        db = s[i];
        pos = i;
        break;
      }
    }
    if (pos > 0 && s[pos - 1] == db) {
      puts("Impossible");
      return 0;
    }
    bool possible = false;
    for (int i = 0; !possible && i < 26; i++) {
      string t;
      t.resize(26);
      t[i] = db;
      for (int j = (pos + 1) % 27, k = (i + 1) % 26; j != pos;
           j = (j + 1) % 27) {
        if (s[j] != db) {
          t[k] = s[j];
          k = (k + 1) % 26;
        }
      }
      for (int j = 0; j < 13; j++) {
        grid[0][j] = t[j];
      }
      for (int j = 13, k = 12; j < 26; j++, k--) {
        grid[1][k] = t[j];
      }
      if (isValid()) {
        possible = true;
      }
    }
    if (possible) {
      for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 13; j++) {
          printf("%c", grid[i][j]);
        }
        puts("");
      }
    } else {
      puts("Impossible");
    }
  }
  return 0;
}
