ACM习题,求高手解答

RT.题目如下:
魔板由8个大小相同方块组成,分别用涂上不同颜色,用1到8的数字表示。
其初始状态是
1 2 3 4
8 7 6 5
对魔板可进行三种基本操作:
A操作(上下行互换):
8 7 6 5
1 2 3 4
B操作(每次以行循环右移一个):
4 1 2 3
5 8 7 6
C操作(中间四小块顺时针转一格):
1 7 2 4
8 6 3 5
用上述三种基本操作,可将任一种状态装换成另一种状态。
[输入]标准输入stdin
输入包括多个要求解的魔板,每个魔板用三行描述。
第一行步数N(不超过10的整数),表示最多容许的步数。
第二、第三行表示目标状态,按照魔板的形状,颜色用1到8的表示。
当N等于-1的时候,表示输入结束。
4
5 8 7 6
4 1 2 3
3
8 7 6 5
1 2 3 4
-1
[输出] 标准输出 stdout
对于每一个要求解的魔板,输出一行。
首先是一个整数M,表示你找到解答所需要的步数。接着若干个空格之后,从第一步开始按顺序给出M步操作(每一步是A、B或C),相邻两个操作之间没有任何空格。
注意:如果不能达到,则M输出-1即可。
2 AB
1 A

注:最好用java实现,C或C++也可。

acm大赛对算法和数据结构,还有离散数学要求相当高,不过这里好像都是在研究的设计模式或更高层次的,所以我猜这里对于底层算法之类的研究应该不深(个人猜想而已),所以我认为找c语言的高手更容易找的答案