Problem:
Score : 300 points

Problem Statement

A game is played on a strip consisting of N cells consecutively numbered from 1 to N.

Alice has her token on cell A. Borys has his token on a different cell B.

Players take turns, Alice moves first.
The moving player must shift his or her token from its current cell X to the neighboring cell on the left, cell X-1, or on the right, cell X+1.
Note that it's disallowed to move the token outside the strip or to the cell with the other player's token.
In one turn, the token of the moving player must be shifted exactly once.

The player who can't make a move loses, and the other player wins.

Both players want to win. Who wins if they play optimally?

Constraints

2 \leq N \leq 100

1 \leq A < B \leq N

All input values are integers.

Input

Input is given from Standard Input in the following format:

N A B

Output

Print Alice if Alice wins, Borys if Borys wins, and Draw if nobody wins.

Sample Input 1

5 2 4

Sample Output 1

Alice

Alice can move her token to cell 3.
After that, Borys will be unable to move his token to cell 3, so he will have to move his token to cell 5.
Then, Alice moves her token to cell 4. Borys can't make a move and loses.

Sample Input 2

2 1 2

Sample Output 2

Borys

Alice can't make the very first move and loses.

Sample Input 3

58 23 42

Sample Output 3

Borys

Solution in Rust (1.42.0) (judge verdict: Accepted)

#![allow(unused_imports)]

// language: Rust(1.42.0)
// check available crates on AtCoder at "https://atcoder.jp/contests/language-test-202001"
// My Library Repositry is at "https://github.com/Loptall/prcn_lib"

/*
    青perfほしいよ〜！
*/

// from std...
use std::cmp::{
    max, min, Ordering,
    Ordering::{Equal, Greater, Less},
    Reverse,
};
use std::collections::{BTreeMap, BTreeSet, BinaryHeap, HashMap, HashSet, VecDeque};
use std::convert::TryInto;
use std::fmt;
use std::mem::swap;
use std::num::{NonZeroU32, ParseIntError};
use std::ops::{
    Add, AddAssign, BitAnd, BitAndAssign, BitOr, BitOrAssign, BitXor, BitXorAssign, Div, DivAssign,
    Index, IndexMut, Mul, MulAssign, Neg, Rem, RemAssign, Shl, ShlAssign, Shr, ShrAssign, Sub,
    SubAssign,
};
use std::process::exit;
use std::{f32, f64, i128, i16, i32, i64, i8, isize, u128, u16, u32, u64, u8, usize};

// Dep' crates are...
use itertools::*;
use itertools_num::*;
use lazy_static::lazy_static;
use maplit::{btreemap, btreeset, hashmap, hashset};
use num_bigint::{BigInt, BigUint};
use num_complex::Complex;
use num_integer::{binomial, gcd, lcm, multinomial, Integer};
use num_rational::Rational;
use num_traits::{
    clamp, one, pow, zero, Num, NumAssignOps, NumOps, One, Pow, Signed, Unsigned, Zero,
};
use permutohedron::Heap;
use proconio::{
    derive_readable, fastout, input, is_stdin_empty,
    marker::{Bytes, Chars, Isize1, Usize1},
};
use rand::random;

pub trait Visualize {
    fn visualize(&self, split: &str);
    fn continuous(&self) {
        self.visualize("");
    }
    fn spaces(&self) {
        self.visualize(" ");
    }
    fn lines(&self) {
        self.visualize("\n");
    }
}
macro_rules ! impl_vis_for_sized {($ ($ t : ty ) ,+ ) => {$ (impl Visualize for $ t {fn visualize (& self , _split : & str ) {print ! ("{}" , self ) ; } } ) + } ; }
impl_vis_for_sized! {usize , u8 , u16 , u32 , u64 , u128 , isize , i8 , i16 , i32 , i64 , i128 , String , & str }
impl<T: fmt::Display> Visualize for [T] {
    fn visualize(&self, split: &str) {
        print!("{}", self.iter().join(split));
    }
}
/// macro to output answer improved to println
///
/// this macro will print '\n' at the last.
///
/// # Patterns
///
/// `,`, it means one space, it formats the elements, which is before, space-split.
/// And insert a space after the prefix, unless it is at last.
///
/// `=>`, it means empty string, it formats the element, witch is before, without any split.
/// And insert nothing between two element.
///
/// `;`, it means newline(\n), it formats the element, witch is before, newline-split.
/// And insert a newline after the prefix, unless it is at last.
///
/// # Eample
///
/// ```
/// #[test]
/// fn vis_test() {
///     let a = 1;
///     let b = 2;
///     let c = 3;
///
///     let v = vec!['a', 'b', 'c'];
///
///     // single element test ...
///
///     vis!(a); // 1\n
///     vis!(a,); // 1\n
///     vis!(a =>); // 1\n
///     vis!(a;); // 1\n
///
///     println!();
///
///     vis!(a + b); // 3\n
///
///     println!();
///
///     vis!(v); // a b c\n
///     vis!(v,); // a b c\n
///     vis!(v =>); // abc\n
///     vis!(v;); // a\nb\nc\n
///
///     println!();
///
///     // multi elements connected by common operater test ...
///
///     println!();
///
///     vis!(a, b); // 1 2\n
///     vis!(a, b, c); // 1 2 3\n
///     vis!(a, b, c;); // 1 2 3\n
///
///     println!();
///
///     vis!(a => b); // 12\n
///     vis!(a => b => c); // 123\n
///     vis!(a => b => c ,); // 123\n
///
///     println!();
///
///     vis!(a; b); // 1\n2\n
///     vis!(a; b; c); // 1\n2\n3\n
///     vis!(a; b; c =>); // 1\n2\n3\n
///
///     println!();
///
///     // multi elements connected by different operater test ...
///
///     vis!(a, b; c); // 1 2\n3\n
///     vis!(a; b, c); // 1\n2 3\n
///     vis!(a => b, c); // 12 3\n
///     vis!(a; b => c); // 1\n23\n
///
///     println!();
///
///     vis!(a, v); // 1 a b c\n;
///     vis!(a, v;); // 1 a\nb\nc\n;
///     vis!(a => v =>); // 1abc\n;
///
///     println!("\d");
///     // panic!()
/// }
/// ```
#[macro_export]
macro_rules ! vis {() => {println ! () ; } ; ($ last : expr ; ) => {$ last . lines () ; vis ! () } ; ($ last : expr => ) => {$ last . continuous () ; vis ! () ; } ; ($ last : expr $ (, ) ? ) => {$ last . spaces () ; vis ! () ; } ; ($ first : expr ; $ ($ rest : tt ) * ) => {$ first . lines () ; println ! () ; vis ! ($ ($ rest ) * ) ; } ; ($ first : expr => $ ($ rest : tt ) * ) => {$ first . continuous () ; vis ! ($ ($ rest ) * ) ; } ; ($ first : expr , $ ($ rest : tt ) * ) => {$ first . spaces () ; print ! (" " ) ; vis ! ($ ($ rest ) * ) ; } ; }

pub const MOD10E9_7: usize = 1000000007;
pub const MOD99_: usize = 998244353;
pub const MAX: usize = std::usize::MAX;
pub const PI: f64 = f64::consts::PI;
pub const ASCII_A: u8 = 65;
pub const ASCII_0: u8 = 48;

// code...
// #[fastout]
fn main() {
    input! {
        n: i64, a: i64, b: i64
    }

    if (b - a).is_even() {
        vis!("Alice");
    } else {
        vis!("Borys");
    }
}