//ll ans = 0, L;
//ll f(ll x){
//    return x&(-x);
//}
//struct Node{
//    Node *ls, *rs;
//    int depth;
//    bool visited;
//    Node(int _depth = 0):depth(_depth){
//        ans ^= f(L-depth);
//        visited = false;
//        ls = rs = NULL;
//    }
//    void prep(bool make_children){
//        if(!visited){
//            visited = true;
//            ans ^= f(L-depth);
//            if(make_children){
//                ls = new Node(depth+1);
//                rs = new Node(depth+1);
//            }
//        }
//    }
//};
//void apply(string s, Node *t){
//    rep(i,sz(s)){
//        if(s[i] == '0')
//            t = t->ls;
//        else
//            t = t->rs;
//        t->prep(i+1 < sz(s));
//    }
//}
//void __(){
//    _(int,n);
//    cin >> L;
//    _(vs,a,n);
//    Node root(-1);
//    root.prep(true);
//    for(auto _ : a){
//        apply(_,&root);
//    }
//    if(ans == 0)
//        print "Bob";
//    else
//        print "Alice";
//}
//
#include <iomanip>
#include <vector>
#include <utility>
#include <iostream>
#include <string>
#define REP_ZERO_INT(i,r) for(int i = 0; i < r; ++i)
#define GET_REP_MACRO(_1,_2,_3,_4,NAME,...) NAME
#define rep(...) GET_REP_MACRO(__VA_ARGS__,REP_ANY,REP_INT,REP_ZERO_INT)(__VA_ARGS__)
#define all(v) (v).begin(), (v).end()
#define sz(v) ll(v.size())
#define T1 template<typename T> static
using namespace std;
typedef long long ll;
typedef vector<string> vs;
T1 ostream& operator<<(ostream& stream, const vector<T>& t);
T1 istream& read(T, T, istream& = cin);
T1 istream& operator>>(istream& stream, vector<T>& t){
    return read(all(t), stream);
}
T1 istream& read(T b, T e, istream& stream){
    for(T it = b; it != e; ++it)
        stream >> *it;
    return stream;
}
struct _print {
    string sep,end;
    bool space;
    ostream &stream;
    _print(string _sep=" ",string _end="\n",
            ostream &_stream = cout)
        : sep(_sep),end(_end),space(false),
            stream(_stream) {}
    ~_print() { stream << end; }
    template <typename T>
        _print &operator , (const T &t) {
            if (space) stream << sep;
            space = true;
            stream << t;
            return *this;
        }
};
#define print _print(),
#define INPUT_WITHOUT_INIT(type,name) type name; cin >> name
#define _IWI(type,name,...) type name(__VA_ARGS__); cin >> name
#define GET_INPUT_MACRO(_1,_2,_3,_4,_5,_6,_7,_8,NAME,...) NAME
#define _(...) GET_INPUT_MACRO(__VA_ARGS__,_IWI,_IWI,_IWI,_IWI,_IWI,_IWI,INPUT_WITHOUT_INIT)(__VA_ARGS__)
ll ans = 0, L;
ll f(ll x){
    return x&(-x);
}
struct Node{
    Node *ls, *rs;
    int depth;
    bool visited;
    Node(int _depth = 0):depth(_depth){
        ans ^= f(L-depth);
        visited = false;
        ls = rs = NULL;
    }
    void prep(bool make_children){
        if(!visited){
            visited = true;
            ans ^= f(L-depth);
            if(make_children){
                ls = new Node(depth+1);
                rs = new Node(depth+1);
            }
        }
    }
};
void apply(string s, Node *t){
    rep(i,sz(s)){
        if(s[i] == '0')
            t = t->ls;
        else
            t = t->rs;
        t->prep(i+1 < sz(s));
    }
}
void __(){
    _(int,n);
    cin >> L;
    _(vs,a,n);
    Node root(-1);
    root.prep(true);
    for(auto _ : a){
        apply(_,&root);
    }
    if(ans == 0)
        print "Bob";
    else
        print "Alice";
}
int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    cout << fixed << setprecision(15);
        __();
}


Measured memory_bytes: 6736