import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import java.util.concurrent.*;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
import java.util.stream.IntStream;

public class Main {

static List<Character> results;

public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    while (scanner.hasNextInt()) {
        final int total = scanner.nextInt();
        results = new ArrayList<>();
        Lock lock = new ReentrantLock();
        Condition[] conditions = {
                lock.newCondition(),
                lock.newCondition(),
                lock.newCondition(),
                lock.newCondition()
        };
        final Future<Boolean>[] taskResult = new Future[1];
        ExecutorService executor = Executors.newFixedThreadPool(4);
        IntStream.rangeClosed(0, 3).forEach(it -> {
            taskResult[0] = executor.submit(new Task(lock, conditions[it], conditions[it == 3 ? 0 : it + 1], total, it));
        });
        executor.shutdown();
        try {
            if (taskResult[0].get(2, TimeUnit.SECONDS)) {
                for (Character item : results) {
                    System.out.print(item);
                }
                System.out.println();
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        } catch (TimeoutException e) {
            e.printStackTrace();
        }
    }
}

static class Task implements Callable<Boolean> {

    static char[] WORDS = {'A', 'B', 'C', 'D'};

    int count;

    Condition conSelf;

    Condition conTarget;

    int index;

    Lock lock;

    Task(Lock lock, Condition conSelf, Condition conTarget, int count, int index) {
        this.lock = lock;
        this.count = count;
        this.conSelf = conSelf;
        this.conTarget = conTarget;
        this.index = index;
    }

    public Boolean call() {
        while (count > 0) {
            try {
                lock.lock();
                while (results.size() % WORDS.length != index) {//弃锁条件
                    conSelf.await(); 
                }
                results.add(WORDS[index]);
                count--;
                conTarget.signal(); //唤醒等待此condition的线程
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                lock.unlock();
            }
        }
        return true;
    }
}

}