using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace work2
{
    class Program
    {
        static void Main(string[] args)
        {
            String[] teamAName = new String[3] { "A", "B", "C" }; // 名字表 带初始化值的 字符串数组
            String[] teamBName = new String[3] { "X", "Y", "Z" }; // 名字表

            int[] pairMask = new int[3] { 6, 7, 2 };// 配对表               带初始化值的 整数数组
            for (int rep = 3; rep-- != 0;)          // 搜索循环             逆向循环,后置自减法
            {
                for (int i = 0; i < 3; ++i)         // A队 的配对表扫描循环 正向循环
                {
                    int m = pairMask[i];
                    if (m == 0) continue;           // 为0 表示已经排除了   终结本次循环,进入下一次循环(后面的代码不执行了)
                    if ((m & (m - 1)) != 0) continue;// 2 幂检验            位码与操作, 终结本次循环,进入下一次循环(后面的代码不执行了)

                    int b = -1;
                    for (int k = 0; k < 3; ++k)     // 消除编码 用的循环
                    {
                        pairMask[k] &= ~m;          // 消除编码             位码与,位码反操作
                        if (m == (1 << k)) b = k;   // 转换为 B 队的序号    位码移动操作
                    }
                    Console.WriteLine("{0} : {1}", teamAName[i], teamBName[b]); // 输出   数组访问,控制台输出
                    break;                          // 终结该层循环,到上一层
                }
            }
        }
    }
}