Karlsson has visited Lillebror again. They found a box of chocolates and a big whipped cream cake at Lillebror's place. Karlsson immediately suggested to divide the sweets fairly between Lillebror and himself. Specifically, to play together a game he has just invented with the chocolates. The winner will get the cake as a reward.

The box of chocolates has the form of a hexagon. It contains 19 cells for the chocolates, some of which contain a chocolate. The players move in turns. During one move it is allowed to eat one or several chocolates that lay in the neighboring cells on one line, parallel to one of the box's sides. The picture below shows the examples of allowed moves and of an unacceptable one. The player who cannot make a move loses.

<image>

Karlsson makes the first move as he is Lillebror's guest and not vice versa. The players play optimally. Determine who will get the cake.

Input

The input data contains 5 lines, containing 19 words consisting of one symbol. The word "O" means that the cell contains a chocolate and a "." stands for an empty cell. It is guaranteed that the box contains at least one chocolate. See the examples for better understanding.

Output

If Karlsson gets the cake, print "Karlsson" (without the quotes), otherwise print "Lillebror" (yet again without the quotes).

Examples

Input

  . . .
 . . O .
. . O O .
 . . . .
  . . .


Output

Lillebror

Input

  . . .
 . . . O
. . . O .
 O . O .
  . O .


Output

Karlsson
#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;
}
