import java.util.*; import java.io.*; import java.math.*; import java.math.BigInteger; import java.text.DecimalFormat; public class Tester { //static long sum=0,sum1=Long.MAX_VALUE; //DecimalFormat df = new DecimalFormat("#.#####"); public static final long MOD = (long) (1e9 + 7); // Driver program to test above function public static void main(String args[]) { InputReader in = new InputReader(System.in); OutputStream outputStream = System.out; PrintWriter out = new PrintWriter(outputStream); int arr[]=new int[100001]; Arrays.fill(arr, 1); int count=1; for(int i=2;i<=100000;i++) { if(arr[i]==1) { arr[i]=count; count++; for(int j=i+i;j<=100000;j=j+i) { arr[j]=0; } } } int t=in.nextInt(); while(t-->0) { int n=in.nextInt(); int j; for(j=n;j>1;j--) { if(arr[j]!=0) { if(arr[j]%2!=0) { out.println("Alice"); } else { out.println("Bob"); } break; } } if(j==1) out.println("Bob"); } out.close(); } static int ceilSearch(long arr[], int low, int high, long x) { int mid; /* If x is smaller than or equal to the first element, then return the first element */ if(x <= arr[low]) return low; /* If x is greater than the last element, then return -1 */ if(x > arr[high]) return -1; /* get the index of middle element of arr[low..high]*/ mid = (low + high)/2; /* low + (high - low)/2 */ /* If x is same as middle element, then return mid */ if(arr[mid] == x) return mid; /* If x is greater than arr[mid], then either arr[mid + 1] is ceiling of x or ceiling lies in arr[mid+1...high] */ else if(arr[mid] < x) { if(mid + 1 <= high && x <= arr[mid+1]) return mid + 1; else return ceilSearch(arr, mid+1, high, x); } /* If x is smaller than arr[mid], then either arr[mid] is ceiling of x or ceiling lies in arr[mid-1...high] */ else { if(mid - 1 >= low && x > arr[mid-1]) return mid; else return ceilSearch(arr, low, mid - 1, x); } } static int floorSearch(long arr[], int low, int high, long x) { int mid; /* If x is smaller than or equal to the first element, then return the first element */ if(x >= arr[high]) return high; /* If x is greater than the last element, then return -1 */ if(x < arr[low]) return -1; /* get the index of middle element of arr[low..high]*/ mid = (low + high)/2; /* low + (high - low)/2 */ /* If x is same as middle element, then return mid */ if(arr[mid] == x) return mid; /* If x is greater than arr[mid], then either arr[mid + 1] is ceiling of x or ceiling lies in arr[mid+1...high] */ else if(arr[mid] < x) { if(mid + 1 <= high && x < arr[mid+1]) return mid; else return floorSearch(arr, mid+1, high, x); } /* If x is smaller than arr[mid], then either arr[mid] is ceiling of x or ceiling lies in arr[mid-1...high] */ else { if(mid - 1 >= low && x >= arr[mid-1]) return mid-1; else return floorSearch(arr, low, mid - 1, x); } } static long binaryExponentiation(long x,long n) { long result=1; while(n>0) { result=(result%MOD*x%MOD)%MOD; n--; } return result; } static long nCr(int n, int r){ long rfact=1, nfact=1, nrfact=1,temp1 = n-r ,temp2 = r; if(r>n-r) { temp1 =r; temp2 =n-r; } for(int i=1;i<=n;i++) { if(i<=temp2) { rfact = (rfact%MOD* i%MOD)%MOD; nrfact = (nrfact%MOD* i%MOD)%MOD; } else if(i<=temp1) { nrfact = (nrfact%MOD* i%MOD)%MOD; } nfact = (nfact%MOD* i%MOD)%MOD; } return nfact/(rfact*nrfact); } public static long find_ncr(long n, long r) { long result=1; // System.out.println(factorial(29)); result = factorial(n)/(factorial(r)*factorial(n-r)); return result; } public static long factorial(long n) { long c; long result = 1; for (c = 1; c <= n; c++) result = result*c; return result; } public static long power(long base, long exp) { long res=1; while(exp>0) { if(exp%2==1) res=(res*base)%MOD; base=(base*base)%MOD; exp/=2; } return res%MOD; } public static void computeLPSArray(String pat, int M, int lps[]) { // length of the previous longest prefix suffix int len = 0; int i = 1; lps[0] = 0; // lps[0] is always 0 // the loop calculates lps[i] for i = 1 to M-1 while (i < M) { if (pat.charAt(i) == pat.charAt(len)) { len++; lps[i] = len; i++; } else // (pat[i] != pat[len]) { // This is tricky. Consider the example. // AAACAAAA and i = 7. The idea is similar // to search step. if (len != 0) { len = lps[len-1]; // Also, note that we do not increment // i here } else // if (len == 0) { lps[i] = len; i++; } } } } public static void KMPSearch(String pat, String txt) { System.out.println("sdfsdf"); int M = pat.length(); int N = txt.length(); // create lps[] that will hold the longest // prefix suffix values for pattern int lps[] = new int[M]; int j = 0; // index for pat[] // Preprocess the pattern (calculate lps[] // array) computeLPSArray(pat,M,lps); int i = 0; // index for txt[] while (i < N) { if (pat.charAt(j) == txt.charAt(i)) { j++; i++; } if (j == M) { System.out.println("Found pattern "+ "at index " + (i-j)); j = lps[j-1]; } // mismatch after j matches else if (i < N && pat.charAt(j) != txt.charAt(i)) { // Do not match lps[0..lps[j-1]] characters, // they will match anyway if (j != 0) j = lps[j-1]; else i = i+1; } } } public static long power(long i) { long c=1; while(i>1) { c=((c%MOD)*(2%MOD))%MOD; i--; } return c; } public static long gcd(long p, long q) { if (q == 0) { return p; } return gcd(q, p % q); } static int mid=-1; static int find(int arr[],int k,int f,int l) { if(f>l) return mid; mid=(f+l)/2; if(arr[mid]==k) return mid; if(arr[mid]0) { mul=(mul%1000000007)*(i%1000000007)%1000000007; i--; } return mul; } static class LengthComparator implements Comparator { public int compare(String arg0, String arg1) { // Use Integer.compare to compare the two Strings' lengths. return (arg0+arg1).compareTo(arg1+arg0); } } // static long output(ArrayList h[],int j,boolean[] v) // { // int k; // v[j]=true; // sum++; // for(k=0;k h[],long ban[]) { v[j]=true; int k; long sum=0; sum=sum+ban[j]; //System.out.println(h[j].size()); for(k=0;k stack = new ArrayDeque(); private int least,count,v; Set[] cities; private int[] risk; Graph(int n,String[] risk){ cities = new HashSet[n]; this.risk = new int[n]; for(int i =0;i(); } for(int i =0;i { private long first; private long index; //private long second;; public Pair(long i, long j) { this.first = i; this.index = j; } public Pair() { // TODO Auto-generated constructor stub } public long getFirst() { return first; } //public long getSecond() { return second; } public long getIndex() { return index ;} public void setFirst(long k) { this.first=k ; } public void setIndex(long k) { this.index=k ;} //public void setSecond(long k) { this.second=k ;} @Override public int compareTo(Pair o) { return Long.compare(this.first, o.first); } } static class InputReader { public BufferedReader reader; public StringTokenizer tokenizer; public InputReader(InputStream inputstream) { reader = new BufferedReader(new InputStreamReader(inputstream)); tokenizer = null; } public String nextLine(){ String fullLine=null; while (tokenizer == null || !tokenizer.hasMoreTokens()) { try { fullLine=reader.readLine(); } catch (IOException e) { throw new RuntimeException(e); } return fullLine; } return fullLine; } public String next() { while (tokenizer == null || !tokenizer.hasMoreTokens()) { try { tokenizer = new StringTokenizer(reader.readLine()); } catch (IOException e) { throw new RuntimeException(e); } } return tokenizer.nextToken(); } public long nextLong() { return Long.parseLong(next()); } public int nextInt() { return Integer.parseInt(next()); } } }