#include <bits/stdc++.h>
using namespace std;
void showBit(int no, int N) {
  for (int i = N - 1; i >= 0; i--)
    if ((no >> i) & 1)
      printf("1");
    else
      printf("0");
  printf("\n");
}
template <class T>
T binToDec(string s) {
  int ln = s.length();
  T sum = 0;
  for (int i = ln - 1, k = 0; i >= 0; i--, k++)
    sum = sum + (s[i] - '0') * (1 << k);
  return sum;
}
void combination(long long com[][1005]) {
  com[0][0] = 1;
  int sz = 1000;
  for (int i = 1; i <= sz; i++) {
    com[i][0] = 1;
    for (int j = 1; j <= i; j++) {
      com[i][j] = com[i - 1][j] + com[i - 1][j - 1];
      com[i][j] = com[i][j] % 1000000007;
    }
  }
}
template <class T>
T bigmod(T bs, T p, T mod) {
  if (mod <= 0) {
    printf("Exception");
    return 0;
  }
  T ans = 1;
  T k = bs;
  while (p) {
    if (p & 1) {
      ans = ans * k;
      ans %= mod;
    }
    k *= k;
    k %= mod;
    p = p >> 1;
  }
  return ans;
}
template <class T>
T gcd(T u, T v) {
  if (v == 0) return u;
  return gcd(v, u % v);
}
void insert_ind(int cs, int ci, int s, int e) {
  if (s == e) {
    return;
  }
  int mid = (s + e) / 2;
  if (ci <= mid)
    insert_ind(2 * cs, ci, s, mid);
  else
    insert_ind(2 * cs + 1, ci, mid + 1, e);
}
void update_ind(int cs, int ci, int s, int e, int val) {
  if (s == e) {
    return;
  }
  int mid = (s + e) / 2;
  if (ci <= mid)
    update_ind(2 * cs, ci, s, mid, val);
  else
    update_ind(2 * cs + 1, ci, mid + 1, e, val);
}
void update_seg(int cs, int ds, int de, int s, int e, int val) {
  if (ds == s && de == e) {
    return;
  }
  int mid = (s + e) / 2;
  if (ds <= mid) update_seg(2 * cs, ds, min(mid, de), s, mid, val);
  if (de > mid) update_seg(2 * cs + 1, max(mid + 1, ds), de, mid + 1, e, val);
}
void pattern_match(char pat[], const int len, int pi[]) {
  pi[1] = 0;
  for (int i = 2; i <= len; i++) {
    int st = i - 1;
    while (st >= 0 && pat[pi[st] + 1] != pat[i]) st = pi[st];
    if (st == 0)
      pi[i] = 0;
    else
      pi[i] = pi[st] + 1;
  }
}
void pattern_match(char pat[], int pi[], char tar[], const int len1, int gi[]) {
  if (pat[0] == tar[0]) gi[0] = 1;
  for (int i = 1; i < len1; i++) {
    int st = gi[i - 1];
    while (pat[st] != tar[i]) {
      if (st == 0) {
        st = -1;
        break;
      }
      st = pi[st - 1];
    }
    if (st == -1)
      gi[i] = 0;
    else
      gi[i] = st + 1;
  }
}
struct myArray {
  int mat[10][10];
};
myArray matrix_mul(myArray mat1, myArray mat2, const int sz) {
  int tmp[sz][sz];
  memset((tmp), 0, sizeof((tmp)));
  for (int r = 0; r < sz; r++)
    for (int c = 0; c < sz; c++)
      for (int cr = 0; cr < sz; cr++)
        tmp[r][c] += mat1.mat[r][cr] * mat2.mat[c][cr];
  myArray res;
  for (int r = 0; r < sz; r++)
    for (int c = 0; c < sz; c++) res.mat[r][c] = tmp[r][c];
  return res;
}
myArray unit_matrix(const int sz) {
  myArray ma;
  memset((ma.mat), 0, sizeof((ma.mat)));
  for (int i = 0; i < sz; i++) ma.mat[i][i] = 1;
  return ma;
}
myArray matrix_expo(int p, myArray mat, const int sz) {
  if (p == 0) {
    return unit_matrix(sz);
  }
  if (p & 1) return matrix_mul(mat, matrix_expo(p - 1, mat, sz), sz);
  myArray tmp = matrix_expo(p >> 1, mat, sz);
  return matrix_mul(tmp, tmp, sz);
}
int X[] = {0, 0, 1, -1};
int Y[] = {1, -1, 0, 0};
const int dx[8] = {-1, 1, -2, 2, -1, 1, -2, 2};
const int dy[8] = {2, 2, -1, -1, -2, -2, 1, 1};
char grid[8][10];
int p[6][10], cnt;
pair<int, int> pi[20];
bool dp[20][1 << 20], v[20][1 << 20];
bool recure(int, int);
bool recure(int step, int cp, int mask) {
  if (v[cp][mask]) return dp[cp][mask];
  v[cp][mask] = true;
  for (int i = (0); i < (19); ++i)
    if (mask & (1 << i)) {
      int cr = pi[i].first, cc = pi[i].second;
      int mask1 = mask;
      while (cr >= 0 && cc < strlen(grid[cr]))
        if (grid[cr][cc] == 'O' && (mask & (1 << p[cr][cc]))) {
          mask1 = mask1 ^ (1 << p[cr][cc]);
          if (!recure(step + 1, cp ^ 1, mask1)) return dp[cp][mask] = true;
          cr--;
          cc++;
        } else
          break;
      cr = pi[i].first, cc = pi[i].second;
      mask1 = mask;
      while (cr >= 0 && cc >= 0)
        if (grid[cr][cc] == 'O' && (mask & (1 << p[cr][cc]))) {
          mask1 = mask1 ^ (1 << p[cr][cc]);
          if (!recure(step + 1, cp ^ 1, mask1)) return dp[cp][mask] = true;
          cr--;
          cc--;
        } else
          break;
      cr = pi[i].first, cc = pi[i].second;
      mask1 = mask;
      while (cc < strlen(grid[cr]))
        if (grid[cr][cc] == 'O' && (mask & (1 << p[cr][cc]))) {
          mask1 = mask1 ^ (1 << p[cr][cc]);
          if (!recure(step + 1, cp ^ 1, mask1)) return dp[cp][mask] = true;
          cc += 2;
        } else
          break;
    }
  return dp[cp][mask] = false;
}
void Set1(int ci, int lm, int cr) {
  for (int i = (0); i < (lm); ++i) {
    p[cr][ci] = cnt;
    pi[cnt++] = make_pair(cr, ci);
    ci += 2;
  }
}
void Set() {
  Set1(2, 3, 0);
  Set1(1, 4, 1);
  Set1(0, 5, 2);
  Set1(1, 4, 3);
  Set1(2, 3, 4);
}
int main() {
  memset((grid), '.', sizeof((grid)));
  for (int i = (0); i < (5); ++i) gets(grid[i]);
  Set();
  int mask = 0;
  for (int i = (0); i < (19); ++i)
    if (grid[pi[i].first][pi[i].second] == 'O') mask ^= (1 << i);
  if (recure(0, 0, mask))
    cout << "Karlsson";
  else
    cout << "Lillebror";
  printf("\n");
  return 0;
}
