Go: package main

import (
	"bufio"
	"os"
	"strings"
	"strconv"
	"fmt"
	)

var scanner = bufio.NewScanner(os.Stdin)
const INF = 0x7FFFFFFF

func main() {
	for scanner.Scan() {
		buf := strings.Split(scanner.Text(), " ")
		n, _ := strconv.Atoi(buf[0])
		m, _ := strconv.Atoi(buf[1])
		if n == 0 && m == 0 {
			break
		}
		chairs := make([]string, n)
		for i := range chairs {
			chairs[i] = "#"
		}
		sit := func(who string) {
			if who == "A" {
				chairs[getStringIndex(chairs, "#")] = "A" // A国の人は左から見て行って空いている席を見つけ次第座る
				// log.Println(chairs)
			} else if who == "B" {
				f := true
				for i := n-1; i > -1; i-- {
					// B国の人はA国人の隣以外で、右端から空いている椅子に座る
					if chairs[i] == "#" && (i == 0 || chairs[i-1] != "A") && (i == n-1 || chairs[i+1] != "A") {
								chairs[i] = "B"
								f = false
								break
					}
				}
				// A国人の隣しか空いていない場合、我慢して左端から空いている椅子に座る
				if f {
					chairs[getStringIndex(chairs, "#")] = "B"
				}
				// log.Println(chairs)
			} else if who == "C" { // C国人は人の隣に座りたい
				for i := 0; i < n; i++ {
					if chairs[i] != "#" {
						if i + 1 <= n-1 && chairs[i+1] == "#" {
							chairs[i+1] = "C"
							break
						} else if i - 1 >= 0 && chairs[i-1] == "#" {
							chairs[i-1] = "C"
							break
						}
					}
				}
				// log.Println(chairs)
			} else { // who == "D"
				// D国の人は人から離れて座りたい
				// どうしても誰かの隣に座らなければならない場合、その中で一番左側にある椅子に座る
				scores := make([]int, n)
				for i := range scores {
					scores[i] = INF
				}
				for i, v := range chairs {
					if v == "#" {
						scores[i]++
					}
				}
				for i := n-1; i > -1; i-- {
					tmp := 0
					if chairs[i] == "#" {
						tmp++
					} else {
						tmp = 0
					}
					scores[i] = min(scores[i], tmp)
				}
				chairs[getIntIndex(scores, getMax(scores))] = "D"
				// log.Println(chairs)
			}
		}
		scanner.Scan()
		if first := scanner.Text(); first == "A" || first == "D" {
			chairs[0] = first
		} else if first == "B" {
			chairs[len(chairs)-1] = "B"
		} else {
			chairs[n/2] = "C"
		}
		// log.Println(chairs)
		for i := 0; i < m-1; i++ {
			scanner.Scan()
			sit(scanner.Text())
		}
		fmt.Println(strings.Join(chairs, ""))
	}
}

func getStringIndex(chairs []string, who string) int {
	for i, v := range chairs {
		if v == who {
			return i
		}
	}
	return -1
}

func getIntIndex(scores []int, target int) int {
	for i, v := range scores {
		if v == target {
			return i
		}
	}
	return -1
}

func min(a, b int) int {
	if a > b {
		return b
	}
	return a
}

func getMax(scores []int) int {
	tmp := -1
	for _, v := range scores {
		if tmp < v {
			tmp = v
		}
	}
	return tmp
}

C++: #include<iostream>
#include<string>
using namespace std;

int main()
{
	int n,m,i,j,s[102],temp,flag,max,z,count,left,right;
	char k;
	cin>>n>>m;

	while(n!=0){

	for(i=0;i<102;i++)
		s[i]=100;
	for(i=1;i<n+1;i++)
		s[i]=0;

	for(i=0;i<m;i++){
		max=0;
		cin>>k;
		if(k=='A'){
			for(j=1;j<n+1;j++){
				if(s[j]==0){
					s[j]=1;
				break;
				}
			}
		}else if(k=='B'){
			flag=0;
			for(j=n;j>1;j--){
				if(s[j]==0){
					if(s[j+1]!=1 && s[j-1]!=1){
						s[j]=2;
						flag=1;
						break;
					}
					else temp=j;
				}
			}
			if(flag==0){
				s[j]=temp;
				temp=0;
			}
		}else if(k=='C'){
			flag = 0;
			for(j=2;j<n;j++){
				if(s[j]==0 && s[j-1]!=0){
					s[j]=3;
					flag = 1;
					break;
				}
			}
			if(flag ==0){
				if(n%2==0){
					s[n/2+1]=3;
				}
				else {
					s[(n+1)/2]=3;
				}
			}
		}
		else if(k=='D'){
			temp=0;max=0;flag=0;
			for(j=n;j>0;j--){
				if(s[j]==0){
					left=0;right=0;
					for(z=1;;z++){
						if(s[j+z]!=0)
							break;
						else
							right++;
					}

					for(z=1;;z++){
						if(s[j-z]!=0)
							break;
						else 
							left++;
					}
						if(left>right)
							 temp=left;
						else temp=right;
	
				if(temp>=max){
					max=temp;
					flag=j;
				}
				}
			}
			s[flag]=4;
		}
	}


	for(i=1;i<n+1;i++){
		if(s[i]==0)
			cout<<'#';
		else if(s[i]==1)
			cout<<'A';
		else if(s[i]==2)
			cout<<'B';
		else if(s[i]==3)
			cout<<'C';
		else if(s[i]==4)
			cout<<'D';
	}

	cout<<"\n";

	cin>>n>>m;
	}


		return 0;
	}

C++: #include <iostream>
#include <iomanip>
#include <cstdio>
#include <string>
#include <cstring>
#include <deque>
#include <list>
#include <queue>
#include <stack>
#include <vector>
#include <utility>
#include <algorithm>
#include <map>
#include <set>
#include <complex>
#include <cmath>
#include <limits>
#include <cfloat>
#include <climits>
#include <ctime>
#include <cassert>
#include <numeric>
#include <fstream>
#include <functional>
#include <bitset>

using namespace std;
#define int long long int
const int INF = 1001001001001001LL;
const int MOD = 1000000007;

int di[] = {-1, 0, 1, 0, -1, 1, 1, -1};
int dj[] = {0, 1, 0, -1, 1, 1, -1, -1};


void f(string &s, char op){
    
    int n = s.size();
    if(op == 'A'){
        for(int i = 0; i < n; i++){
            if(s[i] == '#'){
                s[i] = 'A';
                return;
            }
        }
        
    }

    if(op == 'B'){
        for(int i = n - 1; i >= 0; i--){
            if(s[i] != '#') continue;

            if(i == n - 1){
                if(s[i - 1] != 'A'){
                    s[i] = 'B';
                    return;
                }
            }else if(i == 0){
                if(s[i + 1] != 'A'){
                    s[i] = 'B';
                    return;
                }
            }else{
                if(s[i - 1] != 'A' && s[i + 1] != 'A'){
                    s[i] = 'B';
                    return;
                }
            }
        }

        for(int i = 0; i < n; i++){
            if(s[i] == '#'){
                s[i] = 'B';
                return;
            }
        }
    }

    if(op == 'C'){
        
        bool check = false;
        for(int i = 0; i < n; i++){
            if(s[i] != '#') check = true;
        }

        if(check){
            for(int i = 0; i < n; i++){
                if(s[i] != '#'){
                    if(i != n - 1 && s[i + 1] == '#'){
                        s[i + 1] = 'C';
                        return;
                    }else if(i != 0 && s[i - 1] == '#'){
                        s[i - 1] = 'C';
                        return;
                    }
                }
            }
        }else{
            int idx = n / 2;
            s[idx] = 'C';
            return;
        }
    }

    if(op == 'D'){
        vector<int> v(n, INF);
        for(int i = 0; i < n; i++) if(s[i] != '#') v[i] = 0;
        for(int i = 0; i < n; i++){
            if(s[i] != '#'){
                int dis = 0;
                for(int j = i + 1; j < n; j++){
                    dis++;
                    if(s[j] != '#') continue;
                    v[j] = min(v[j], dis);
                }

                dis = 0;
                for(int j = i - 1; j >= 0; j--){
                    dis++;
                    if(s[j] != '#') continue;
                    v[j] = min(v[j], dis);
                }
            }
        }

        /*
        for(int i = 0; i < n; i++) cout << v[i] << " ";
        cout << endl;
        */

        int ans = 0;
        int idx = 0;
        for(int i = 0; i < n; i++){
            if(s[i] != '#') continue;
            if(ans < v[i]){
                ans = v[i];
                idx = i;
            }
        }

        s[idx] = 'D';

        return;
    }

}

signed main(){
    
    while(1){
        int n, q; cin >> n >> q;
        if(n == 0 && q == 0) break;
        
        string seet;
        for(int i = 0; i < n; i++) seet = seet + "#";
        
        for(int i = 0; i < q; i++){
            char op; cin >> op;
            f(seet, op);
        }

        cout << seet << endl;
        
    }
    return 0;
}