大海Online的博客

Looking for Interest

告别臃肿与繁琐:纯原生 Swift + SwiftUI 打造 MacBook 专属极简应用商店 DahaiAppStore

在日常使用 MacBook 的过程中,管理与安装 macOS 应用一直存在着令人无奈的割裂感:

  1. Mac App Store 限制重重:由于苹果严格的沙盒机制与审核政策,许多高频使用的开发者工具、系统利器与开源项目根本无法在官方 App Store 上架。
  2. Homebrew 强大却缺乏直观体验:命令行虽快,但对于多数日常应用,缺少了应用图标、分类索引、版本说明以及下载进度的直观感知。
  3. 官网手动下载 DMG/PKG 极为繁琐:每次找软件都要浏览器搜索官网、下载 DMG、手动挂载、拖拽到 Applications、弹出磁盘镜像,下载目录还堆满了旧安装包,磁盘空间不知不觉被挤爆;想要更新时,往往还要反复刷官网或依赖软件自有的弹窗。
  4. 跨平台工具臃肿沉重:市面上一些第三方的应用管理客户端动辄使用 Electron 打包,内存动辄吞噬数百兆,失去了 macOS 平台应有的轻快与优雅。

为了解决这些痛点,我用 100% 纯苹果原生技术栈(Swift 6 + SwiftUI + AppKit) 为 MacBook 量身打造了一款极简的原生 macOS 应用中心——DahaiAppStore(大海应用商店)。

大海 App Store 官方原生图标


一、设计哲学:致敬 Mac App Store 的纯白极简美学

在设计 DahaiAppStore 时,核心原则就是两个字:克制。

  • 纯白通透的原生视觉:遵循 macOS 原生 App Store 的设计语言,采用清爽明亮的白底与标准深浅自适应配色,摒弃花里胡哨的霓虹渐变和繁杂装饰,还原最纯正的 Mac 原生质感。
  • 经典三栏/双栏导航:采用现代 SwiftUI 的 NavigationSplitView 构建,清晰划分「发现应用」、「已安装」、「下载管理」、「应用录入」四大模块,交互逻辑自然顺手。
  • 精心雕琢的矢量 AppIcon:图标遵循 Apple macOS 官方规范,采用纯正 Squircle 苹果圆角,以深邃大海蓝为主基调,中央融入开启形态的应用宝盒与浪花剪影,右上角缀以星芒,与 macOS Dock 完美相融。
  • 贴心的系统级原生交互:
    • 全局无级字号缩放:支持 ⌘ + 放大、⌘ - 缩小、⌘ 0 重置(80% ~ 145% 自由缩放),并伴随动态悬浮 HUD 提示,关爱大屏与近视阅读体验;
    • 纯正的 macOS 系统菜单栏:将常用功能和缩放项无缝并入 macOS 顶栏菜单,全中文适配,操作浑然一体。

二、核心功能亮点:为真实使用场景而生

1. 毫秒级本地应用探测与状态感知

DahaiAppStore 会在后台毫秒级扫描 /Applications 与 ~/Applications,深度读取本地每个 .app 的 Info.plist(通过 CFBundleIdentifier 与 CFBundleShortVersionString 精准识别)。

根据版本对比与安装状态,卡片和详情页会自动呈现清晰的动作状态:

  • 【获取】:未安装,点击发起下载与自动安装;
  • 【打开】:已安装且为最新版,一键原生拉起应用;
  • 【更新】:检测到云端或源存在更高版本;
  • 【下载中】:显示下载进度条与实时网速。

2. “不打断工作流”的人性化更新体验

在常规应用商店里,一旦有新版本,按钮往往强制变为【更新】,如果你此时正好要急着用该应用处理工作,升级过程就会无情打断你的节奏。

DahaiAppStore 特别设计了双操作并存机制:

  • 当检测到有新版本时,操作栏同时并排呈现高亮蓝色的 【更新】 与原生灰色的 【打开】。
  • 用户既可以随时启动新版本下载,也可以无阻碍直接拉起当前本地安装的版本,绝不强制阻塞当前工作!
  • 详情页核心指标栏更有一目了然的 ✨ 最新版本 与 💻 本地已装 对照,透明清晰。

3. 三合一敏捷录入工具

一个好用的应用商店,关键在于生态内容的维护成本必须极低。DahaiAppStore 设计了三种灵活录入机制:

  1. Brew 包名一键解析:输入 cask 包名(如 visual-studio-code、google-chrome、iterm2),系统会自动调用官方 Formulae 接口解析包名、版本、官方直链、主页及描述,一键保存为本地 JSON 并可直接发起安装;同时支持模糊搜索与多候选包一键切换。
  2. 灵活自定义录入(含 Nginx Autoindex 解析):支持录入包名、中文名、分类、带 {version} 占位符的下载链接。更强大的是,它甚至内置了 Nginx autoindex on 目录页爬虫解析器,输入内网或镜像站的版本列表 URL,即可自动爬取提取历史多版本!
  3. 标准 JSON 导入与模板:界面内置规范的 JSON 格式模板与一键复制功能,支持在文本框中直接粘贴单条/批量配置,或从本地 .json 文件批量导入,非常适合团队统一分发内部开发工具套件。

4. 全生命周期下载与安装包缓存管理

传统的下载通常把一堆 .dmg、.pkg 堆在“下载”文件夹,长年累月占用几十上百 G 硬盘。DahaiAppStore 对此做了完整闭环:

  • 精准下载引擎:基于原生 URLSessionDownloadDelegate,实时计算已下载大小、总大小、百分比进度条与实时网速(KB/s、MB/s),支持暂停、重试与取消。
  • 全自动安装驱动:
    • DMG:自动通过系统命令无感知挂载,将内部 .app 同步拷贝至 /Applications,安装完成后自动弹出/卸载虚拟盘;
    • PKG:自动调用系统原生 Installer;
    • ZIP:自动解压缩并归档至应用目录。
  • 独立的安装包管理中心:将下载的所有安装介质统一缓存管理,清晰展示文件大小与日期,支持一键重新安装、单个删除或多选批量清理,随时释放宝贵的 SSD 磁盘空间。

三、纯原生技术架构与实现

整个项目采用纯原生 Swift 技术栈开发,不依赖任何庞大的第三方三方包,兼具优雅、轻快与高稳定性:

DahaiAppStore/
├── Package.swift                     # 纯原生 SPM 工程配置
├── Resources/                        # 原生 AppIcon 矢量资源与图标
├── Sources/DahaiAppStore/
│   ├── DahaiAppStoreApp.swift        # App 入口、原生窗口与菜单栏命令
│   ├── Models/
│   │   ├── AppItem.swift             # 应用数据模型(版本、多渠道字段)
│   │   ├── DownloadTaskItem.swift    # 下载任务与实时状态模型
│   │   └── LocalPackage.swift        # 本地安装包缓存模型
│   ├── Services/
│   │   ├── AppStoreService.swift     # 软件源管理、JSON 持久化存储
│   │   ├── InstalledDetector.swift   # 本地 /Applications 扫描与版本比对引擎
│   │   ├── BrewService.swift         # Homebrew Cask API 解析器与模糊匹配
│   │   ├── NginxIndexParser.swift    # Nginx autoindex HTML 版本爬虫
│   │   ├── DownloadManager.swift     # 原生 URLSession 下载引擎
│   │   └── InstallerService.swift    # DMG 挂载拷贝 / PKG / ZIP 自动化安装器
│   └── Views/
│       ├── MainView.swift            # 侧边栏与主分栏视图
│       ├── AppListView.swift         # 应用卡片市场列表与已安装筛选
│       ├── AppDetailView.swift       # 详情页、历史版本切换与核心指标栏
│       ├── AppImportView.swift       # 三合一录入面板
│       ├── DownloadsView.swift       # 下载进度面板与安装包清理中心
│       └── Components/               # 字体缩放 HUD、状态胶囊等纯原生组件

为什么坚持纯原生技术栈?

  • 零冷启动延迟:双击即可毫秒级打开,无需等待 JavaScript 运行时或 Chromium 内核初始化;
  • 超低内存占用:常驻内存仅需几十兆,对 MacBook 续航和资源消耗极其友好;
  • 天然的系统一致性:无论是动画曲线、焦点状态、键盘快捷键还是系统外观切换,都具备 100% 原汁原味的 macOS 质感。

四、下载体验与安装指南

DahaiAppStore 首个体验版本 v0.1 现已正式发布!欢迎下载体验并提出宝贵建议:

📥 软件下载

🚀 安装方式

  1. 下载完成后双击打开 DahaiAppStore-v0.1.dmg 磁盘镜像;
  2. 将 DahaiAppStore 图标直接拖入 Applications(应用程序)快捷文件夹;
  3. 打开 Launchpad 或应用程序列表,启动 DahaiAppStore 即可畅享极简优雅的应用发现与管理之旅!

五、写在最后

在跨平台框架盛行的今天,为特定平台量身打磨一款纯原生的工具,依然有着不可替代的乐趣与体验优势。

DahaiAppStore 将 Homebrew 的庞大软件生态、私有源的灵活分发能力,以及 Mac App Store 的优雅视觉体验融为一体,让 MacBook 上的应用安装与版本管理重归简单、纯净与高效。

基于 HarmonyOS NEXT 的 2FA 双因子身份验证器技术方案与实现解析

随着现代互联网安全防护意识的提高,双因子身份验证(Two-Factor Authentication, 简称 2FA)已经成为保护云平台、代码仓库(如 GitHub、GitLab)以及关键业务系统的标配防线。常见的两步验证主要是基于时间的动态一次性口令(TOTP, Time-Based One-Time Password)。

在 HarmonyOS NEXT(纯血鸿蒙)生态全面推进的背景下,脱离了传统的 Android 兼容层,我们需要一款完全基于 ArkTS 原生开发、零网络依赖、纯离线本地加密的轻量级身份验证器。

本文将从技术架构与算法落地的角度,深入解析如何在 HarmonyOS NEXT 上完整实现符合国际 RFC 6238 规范的原生 2FA 身份验证器。


一、TOTP 算法与 RFC 6238 规范核心原理

TOTP(RFC 6238)是基于事件的计数器口令 HOTP(RFC 4226)在时间维度上的扩展。它的核心计算逻辑可以抽象为一个确定性的数学函数:

TOTP = Truncate(HMAC-SHA-1(K, C)) mod 10^Digits

其中各个参数的含义与计算流程如下:

  1. 共享密钥(Secret Key,即 K):由服务端生成并通过 Base32 编码(如 JBSWY3DPEHPK3PXP)。在客户端计算前需将其还原解码为原始的二进制字节数组。
  2. 时间步长计数器(Time-Step Counter,即 C):
    C = floor((T - T0) / X)
    
    • T 为当前系统的 Unix 时间戳(秒);
    • T0 为时间起点(标准规定为 0,即 1970-01-01 00:00:00 UTC);
    • X 为步长周期(默认通常为 30 秒)。 得到整数 C 后,需要将其转换为标准的 8 字节大端格式(Big-Endian)二进制数据。
  3. HMAC 散列计算:使用共享密钥 K 对 8 字节计数器 C 进行散列计算(通常为 HMAC-SHA1,部分系统亦支持 HMAC-SHA256)。
  4. 动态截断(Dynamic Truncation):
    • 取 HMAC 输出的最后一个字节(第 19 字节)的低 4 位(hmac[19] & 0x0F)作为偏移量 Offset(取值范围 0~15);
    • 从 HMAC 结果的第 Offset 字节开始连续取出 4 个字节;
    • 屏蔽最高位符号位(避免负数运算),拼装成一个 31 位的无符号整数;
    • 对 10^Digits(如 6 位即模 1000000)求模,不足位数时左侧补 0,生成最终呈现给用户的 6 位或 8 位数字口令。

二、HarmonyOS NEXT 核心技术实现

在原生鸿蒙平台上实现上述流程,主要涉及四大核心模块:加密引擎、协议解析、安全沙箱存储以及响应式动效驱动。

1. 双轨加密引擎与优雅降级容灾

在鸿蒙系统上,我们可以利用原生提供的 @ohos.security.cryptoFramework 调用系统底层的硬件加密加速。但在实际开发与测试中,考虑到某些运行环境(如开发阶段的轻量模拟器、IDE 预览器)可能缺少底层加解密驱动,我们在架构上设计了 “硬件加密优先 + 纯 ArkTS 手写算法降级兜底” 的双轨方案:

import cryptoFramework from '@ohos.security.cryptoFramework';

export class TotpUtil {
  /**
   * 优先调用系统原生安全框架计算 HMAC,发生异常时自动切换至纯软件实现
   */
  private static computeHmac(keyBytes: Uint8Array, messageBytes: Uint8Array, algorithm: string): Uint8Array {
    try {
      const algUpper: string = algorithm.toUpperCase();
      const hmacSpec: string = algUpper === 'SHA256' ? 'SHA256' : 'SHA1';

      // 1. 初始化鸿蒙对称密钥生成器与密钥实例
      const symKeyGen = cryptoFramework.createSymKeyGenerator('HMAC');
      const symKey = symKeyGen.convertKeySync({ data: keyBytes });

      // 2. 初始化 MAC 实例并完成数据散列
      const mac = cryptoFramework.createMac(hmacSpec);
      mac.initSync(symKey);
      mac.updateSync({ data: messageBytes });
      const macOutput = mac.doFinalSync();

      return macOutput.data;
    } catch (err) {
      // 容灾降级:使用纯 ArkTS 算法引擎
      return TotpUtil.computeFallbackHmac(keyBytes, messageBytes, algorithm);
    }
  }
}

降级算法内置了符合 FIPS PUB 180-1 规范的完整 SHA-1 块填充与主循环运算,从而确保了核心计算在任何设备或测试环境下均具备 100% 的可靠性。

2. Base32 密钥解码与动态截断

Base32 将 5 位二进制数据映射为一个字符(A-Z, 2-7)。解码过程需要严格将连续的 5-bit 数据流切分重组为标准的 8-bit 字节:

public static decodeBase32(input: string): Uint8Array {
  const cleanInput: string = input.replace(/[\s-]/g, '').toUpperCase();
  if (cleanInput.length === 0) return new Uint8Array(0);

  let bits: number = 0;
  let value: number = 0;
  const output: number[] = [];

  for (let i = 0; i < cleanInput.length; i++) {
    const char: string = cleanInput.charAt(i);
    if (char === '=') break;
    const charIndex: number = TotpUtil.BASE32_ALPHABET.indexOf(char);
    if (charIndex === -1) continue;

    value = (value << 5) | charIndex;
    bits += 5;

    if (bits >= 8) {
      output.push((value >>> (bits - 8)) & 0xff);
      bits -= 8;
    }
  }

  return new Uint8Array(output);
}

动态截断算法实现:

// 执行 RFC 4226 Dynamic Truncation
const offset: number = hmacResult[hmacResult.length - 1] & 0x0f;
const codeNumber: number =
  ((hmacResult[offset] & 0x7f) << 24) |
  ((hmacResult[offset + 1] & 0xff) << 16) |
  ((hmacResult[offset + 2] & 0xff) << 8) |
  (hmacResult[offset + 3] & 0xff);

const modulo: number = Math.pow(10, digits);
const resultNum: number = codeNumber % modulo;
return resultNum.toString().padStart(digits, '0');

3. otpauth:// 协议统一解析与导入

市面上所有的 2FA 服务提供商(如 Google、GitHub、AWS 等)生成二维码或配置信息时,均统一遵循 otpauth:// 协议规范:

otpauth://totp/GitHub:developer@domain.com?secret=JBSWY3DPEHPK3PXP&issuer=GitHub

在客户端解析中,主要需要处理好不同服务商命名规范的差异:

  • Label 部分:可能采用 Issuer:Account 格式,也可能仅有 Account;
  • Query 参数:包含 secret、issuer、algorithm、digits、period 等参数;
  • 优先级兼并:Query 中的 issuer 优先级高于 Label 中的前缀,若两者均缺省则回退至账号标签。

在 UI 层,我们同时集成了系统扫码 Ability 与剪贴板自动监听,当用户复制了包含 otpauth:// 的链接时,表单会自动激活并完成信息提取,大幅简化了输入成本。


4. 零网络权限与本地沙箱持久化

作为一款安全工具,“信任”建立在透明与极简的设计之上。该验证器在 module.json5 中完全没有申请 ohos.permission.INTERNET 网络权限,从系统权限层物理阻断了私钥外泄的可能。

所有账号凭据与密钥均使用 HarmonyOS 原生用户首选项 @ohos.data.preferences 保存于应用专属的本地沙箱路径中:

import preferences from '@ohos.data.preferences';
import common from '@ohos.app.ability.common';

export class StorageUtil {
  private static readonly PREF_NAME: string = 'dahai_authenticator_store';
  private static prefInstance: preferences.Preferences | null = null;

  public static async init(context: common.Context): Promise<void> {
    if (StorageUtil.prefInstance) return;
    StorageUtil.prefInstance = await preferences.getPreferences(context, StorageUtil.PREF_NAME);
    // 从本地安全沙箱加载凭据缓存
  }

  public static async persist(): Promise<void> {
    if (!StorageUtil.prefInstance) return;
    const jsonString: string = JSON.stringify(StorageUtil.memoryCache);
    await StorageUtil.prefInstance.put('key_accounts_list', jsonString);
    await StorageUtil.prefInstance.flush();
  }
}

三、关于本工具

基于以上技术方案落地的应用:身份验证器 Authenticator(2FA)。

  • 产品定位:专为 HarmonyOS NEXT(纯血鸿蒙)生态打造的双因子安全验证工具。
  • 核心特点:
    • 纯血原生体验:ArkTS 原生高刷界面,丝滑圆环倒计时与一键快速复制;
    • 绝对离线安全:零联网权限、密钥存储于本地加密沙箱,杜绝云端拖库风险;
    • 便捷管理:支持多账号快速模糊检索、重要账号置顶(Pin)、支持相机扫码与链接一键识别;
    • 极简无扰:完全去除开屏与信息流广告,启动秒开。

欢迎访问本工具的官方宣传展示与在线 TOTP 体验主页:

Web2App: 一键将任意网站生成 Android APP

今天开发上线了一个新工具:Web2App,可以访问在线演示地址:web2app.dahai.online。

什么是 Web2App?

Web2App 是一个可以将任意网站一键生成为 Android APP 的工具。你只需要输入网址、标题,并上传一个可选的图标,就可以生成一个专属于该网站的 Android APP。

核心原理

Web2App 的核心在于使用了“预生成 APK + 动态修改”的技术:

  1. 预生成 APK:系统预先准备好一个通用的 APK 模板。
  2. 动态解压:当用户提交请求时,系统会在后台解压这个预生成的 APK。
  3. 替换配置:将用户输入的 URL、标题和图标等信息替换到 APK 的配置文件和资源中。
  4. 再签名打包:最后,系统重新打包并对 APK 进行签名,生成最终的安装包。

这种方式大大提高了生成效率,无需为每个请求重新编译整个项目。

欢迎大家试用并反馈! GitHub 地址:https://github.com/seavers/web2app

另外,感慨一句:AI编程速度真快,这个文章也是AI写的

利用群论来研究魔方

文章灵感来源于:

先汇制一张,魔方图

               +--------------+
               |  1    2    3 |
               |  4  top    5 |
               |  6    7    8 |
+--------------+--------------+--------------+--------------+
|              |            8 |  8    5    3 |              |
|     left     |    front   9 |  9 right  13 |     rear     |
|              |           10 | 10   11   12 |              |
+--------------+--------------+--------------+--------------+
               |              |
               |    bottom    |
               |              |
               +--------------+      

这里做了几个简化

  • 同一个块的两个棱或三个角,不做区分,视为同一数字
  • 仅考虑顶部和右手边的图块,主要是顶部和8、9、10,这是我拼魔方经常研究的地方

这里仅研究,1-10 这10个块的还原方法

让我们参考 gap 的程序,来建立模型

创建一个群

gap> cube := Group((1,3,8,6)(2,5,7,4),(8,3,12,10)(5,13,11,9));
Group([ (1,3,8,6)(2,5,7,4), (3,12,10,8)(5,13,11,9) ])    
  • 这里通过Group构造了一个群,由置换构造而来的群
    • 比如:这里(1,3,8,6)的置换,表示顶部4个角块的一次置换
  • 所以这个群,只有两元素
    • 一个是(1,3,8,6)(2,5,7,4) 两个置换组合而成的TOP的转换,这里命名为 U ,(参考:http://www.rubik.com.cn/notation.htm )
    • 一个是(8,3,12,10)(5,13,11,9),两个置换组合而成的RIGHT的转换,这里命名为 R
  • 群里只有乘法一种运算,表示为置换的乘法
    • 比如 U*U=U^2 => (1,3,8,6)(2,5,7,4) = (1,8)(3,6)(2,7)(5,4)

简化旋转的表示方法

gap> f := FreeGroup("U", "R");
<free group on the generators [ U, R ]>

gap> hom := GroupHomomorphismByImages( f, cube, GeneratorsOfGroup(f), GeneratorsOfGroup(cube) );
[ U, R ] -> [ (1,3,8,6)(2,5,7,4), (3,12,10,8)(5,13,11,9) ]
  • FreeGroup(“U”, “R”)是创建了两个元素的群,为了简化cube中两个元素的表示,分别代表Top、Right的旋转
  • GroupHomomorphismByImages是表示创建群同态,将U、R用于表示cube中定义的两个旋转

做一些测试

  • 比如我们要实现 5、9 两个块的交换,即实现 (5,9)
    gap> pre := PreImagesRepresentative(hom, (5,9));
    U^-1*R*U^2*R^-1*U^-1*R*U^-1*R^-1*U^-1*R*U*R^-1*U*R*U^-2*R^-1*U*R*U^-1*R^-1*U^-2*R*U^-1*R^-1*U^-1*R*U*R^-1*U^-1
    
  • PreImagesRepresentative用于群的求解,计算出(5,9)的计算公式
  • 答案也很好理解,比如:U、U^2、U^-1 分别表示 U的一次、两次、三次旋转

  • 按照公式可逆旋转一次,验证一下
    gap> v := Image(hom, pre);
    (2,4)(5,9)
    
  • 结果是 (2,4), (5,9) 两个置换,符合预期。 因为(5,9)无法单独置换

在gap中使用 U、R 的转换标识

gap> U:=f.1;
gap> R:=f.2;
gap> Image(hom, R*U^-1*R^-1*U^-1*R*U^-1*R^-1*U*R*U*R^-1*U);
(1,8)(2,4)(3,6)(5,9)

可以自行构造转换方案来计算转换结果,可以用于批量验证自己的想法

然后,精彩来了…

枚举所有的转动可能

for x in cube do
    if LargestMovedPoint(x) <=7 then
        f := PreImagesRepresentative( hom, x);
        Print(LargestMovedPoint(x), " ", x, "\t===>\t", Length(f), "\t", f, "\n");
    fi;
od;    
  • 这里我们枚举了cube中所有可能
  • LargestMovedPoint(x)是判断x中数字的最大值,7表示,我们只考虑1-7这7个数字转动的情况
  • 然后进行求解公式,并打出来
  • Length(zz)表示求解公式的步数,几步可以转动完成

我们将看到这样的结果

0 ()	===>	0	<identity ...>
7 (4,7,5)	===>	10	U^-1*R^-1*U^-1*R*U^-1*R^-1*U^-2*R*U^-1
7 (4,5,7)	===>	10	U*R^-1*U^2*R*U*R^-1*U*R*U
7 (2,5,7)	===>	10	R*U*R^-1*U*R*U^-2*R^-1*U^-2
5 (2,5,4)	===>	10	U*R*U*R^-1*U*R*U^-2*R^-1*U
7 (2,5)(4,7)	===>	18	U^-1*R*U^2*R^-1*U^-1*R*U^-1*R^-2*U^2*R*U*R^-1*U*R*U
7 (2,7,5)	===>	10	R^-1*U^-1*R*U^-1*R^-1*U^-2*R*U^-2
7 (2,7,4)	===>	20	U*R*U*R^-1*U*R*U^-2*(R^-1*U^2)^2*R*U*R^-1*U*R*U
7 (2,7)(4,5)	===>	20	(U*R*U*R^-1*U*R*U^-2*R^-1)^2*U^-2
7 (2,4,7)	===>	20	U^-1*R*U^2*R^-1*U^-1*R*U^-1*R^-1*U^-1*R*U*R^-1*U*R*U^-2*R^-1*U^-2
5 (2,4,5)	===>	10	U^-1*R*U^2*R^-1*U^-1*R*U^-1*R^-1*U^-1
7 (2,4)(5,7)	===>	20	U^-1*R*U^2*(R^-1*U^-1*R*U^-1*R^-1*U^-1)^2*U^-1*R*U^-2
  • 举个例子
    • 要转换实现(4,7,5),这样三个棱块的转换,可以使用 U^-1*R^-1*U^-1*R*U^-1*R^-1*U^-2*R*U^-1 这个公式
    • 我们使用下面的JS方法,做个转换
      'U^-1*R^-1*U^-1*R*U^-1*R^-1*U^-2*R*U^-1'.replaceAll('*', ' ').replaceAll(/\((.*)\)\^2/g, "$1 $1").replaceAll('^-1', "'").replaceAll("^2", "2").replaceAll("^-2", "2");
      

      答案是:U’ R’ U’ R U’ R’ U2 R U’ (参考 http://www.rubik.com.cn/notation.htm 这里的表示法)

    • 下面是转换小工具
输入:
输出:

我们验证一下

我们使用这个工具进行验证,https://www.jaapsch.net/puzzles/cubie.htm 或者自己拿魔方验证一下, cubie 验证通过

校验更多

刚才的公式,我们挑选一部进行校验

(4,7,5) => U' R' U' R  U' R' U2 R  U'
(4,5,7) => U  R' U2 R  U  R' U  R  U
(2,7,5) =>    R' U' R  U' R' U2 R  U2
(2,5,7) =>    R  U  R' U  R  U2 R' U2
(2,5,4) => U  R  U  R' U  R  U2 R' U
(2,4,5) => U' R  U2 R' U' R  U' R' U'

(2,7,4) => U R U R' U R U2 R' U2 R' U2 2 R U R' U R U
(2,7)(4,5) => U R U R' U R U2 R' U R U R' U R U2 R' U2
(2,4)(5,7) => U' R U2 R' U' R U' R' U' R' U' R U' R' U' U' R U2
(2,5)(4,7) => U' R U2 R' U' R U' R2 U2 R U R' U R U

这些公式,再结合看看 http://www.rubik.com.cn/beginner2.htm ,我们能发现更多的魔方公式

再计算和校验

这里只计算了一些步数比较小的,比较有研究价值

for x in cube do
    f := PreImagesRepresentative( hom, x);
    if LargestMovedPoint(x) = 8 and Length(f) <= 10 then
        Print(LargestMovedPoint(x), " ", x, "\t===>\t", Length(f), "\t", f, "\n");
    fi;
od;

结果:

8 (1,6,8,3)(2,4,7,5)	===>	1	U'
8 (1,6,8,3)(2,4,5,7)	===>	9	U R U2 R' U' R U' R'
8 (1,6,8,3)(2,4)	===>	9	U R' U2 R U R' U R
8 (1,6,8,3)(4,7)	===>	9	R U R' U R U2 R' U
8 (1,6,8,3)(5,7)	===>	9	U R U R' U R U2 R'
8 (1,8)(2,7)(3,6)(4,5)	===>	2	U2
8 (1,8)(2,7,4)(3,6)	===>	10	U R U2 R' U' R U' R' U'
8 (1,8)(2,7,5)(3,6)	===>	10	U R' U2 R U R' U R U'
8 (1,8)(2,4,5)(3,6)	===>	8	R U R' U R U2 R'
8 (1,8)(2,4,7)(3,6)	===>	10	U R U R' U R U2 R' U'
8 (1,8)(3,6)(4,5,7)	===>	8	R' U' R U' R' U2 R
8 (1,8)(3,6)(4,7,5)	===>	8	R' U2 R U R' U R
8 (1,8)(2,5,4)(3,6)	===>	8	R U2 R' U' R U' R'
8 (1,8)(2,5,7)(3,6)	===>	10	U R' U' R U' R' U2 R U'
8 (1,3,8,6)(2,5,7,4)	===>	1	U
8 (1,3,8,6)(2,7,5,4)	===>	9	R U R' U R U2 R' U'
8 (1,3,8,6)(2,4)	===>	9	R' U' R U' R' U2 R U'
8 (1,3,8,6)(5,7)	===>	9	R U2 R' U' R U' R' U'
8 (1,3,8,6)(4,7)	===>	9	U' R U2 R' U' R U' R'
for x in cube do
    f := PreImagesRepresentative( hom, x);
    if LargestMovedPoint(x) = 9 then
        Print(LargestMovedPoint(x), " ", x, "\t===>\t", Length(f), "\t", f, "\n");
    fi;
od;  

举两个比较特殊的例子

  (1,3,8,6)(2,5)(4,7,9) => R U' R' U2 R U2 R'
  (1,6,8,3)(2,9,5)(4,7) => R U2 R' U2 R U  R'

计算更多可能

我们来打印出各种可能(只看1-10的变换)

for x in cube do
    f := PreImagesRepresentative( hom, x);
    if LargestMovedPoint(x) <= 10 then
        Print(x, " => ", f, "\n");
    fi;
od;

通过以下程序转换

package test;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.List;

public class Main {

    public static void main(String[] args) throws IOException {
        List<String> lines = Files.readAllLines(Path.of("input.txt"));
        List<String> result = lines.stream().map(s -> s.replace('*', ' ').replaceAll("\\((.+)\\)\\\\^2", "$1 $1").replace("^-1", "'").replace("^2", "2").replace("^-2", "2")).toList();
        System.out.println(String.join("\n", result));
    }
}

得到:

(5,7,9)                 => R U' R' U R U R' U U R U R' U R' U' R U' R' U2 R U'
(5,9,7)                 => U R' U2 R U R' U R U' R U' R' U' U' R U' R' U' R U R'
(4,7,9)                 => U R U R' U R U2 R' U R' U' R U' R' U2 R U' U' R U' R' U2 R U' U' R' U'
(4,7)(5,9)              => U R U R' U R U2 R' U2 R' U2 R U R' U R2 U' R' U2 R U' R' U' R U R' U'
(4,7,5)                 => U' R' U' R U' R' U2 R U'
(4,9,7)                 => U R U R' U R U2 R' U R' U' R U' R' U2 R R U' R' U2 R U' R' U' R U R'
(4,9,5)                 => U R U2 R' U2 R U R'
(4,9)(5,7)              => U R' U2 R U R' U R U R U' R' U2 R U2 R' U'
(4,5,7)                 => U R' U2 R U R' U R U
(4,5,9)                 => R U' R' U2 R U2 R' U'
(4,5)(7,9)              => U2 R U' R' U2 R U' R' U' R U R'
(3,8)(5,9,7)(6,10)      => U' R U R'
(3,8)(5,7,9)(6,10)      => R U' R' U
(3,8)(6,10)             => U R' U2 R U R' U R U' R U' R' U2 R U' R'
(3,8)(4,7)(5,9)(6,10)   => U R' U2 R U R' U R U R U' R' U
(3,8)(4,7,9)(6,10)      => R U' R2 U' R U' R' U2 R U'
(3,8)(4,7,5)(6,10)      => U2 R U' R' U2 R U' R'
(3,8)(4,5,9)(6,10)      => R' U' R U' R' U2 R U' U2 R U' R' U2 R U' R' U' R U' R' U'
(3,8)(4,5)(6,10)(7,9)   => U R U R' U R U2 R' U R' U' R U' R' U2 R U R U R'
(3,8)(4,5,7)(6,10)      => R U R' U2 R U R' U2
(3,8)(4,9,7)(6,10)      => U R' U2 R U R' U R2 U R'
(3,8)(4,9)(5,7)(6,10)   => U R U R' U R U2 R' U2 R' U2 R U R' U R2 U' R' U' U' R U' R' U' R U' R' U'
(3,8)(4,9,5)(6,10)      => U R U R' U R U R' U U R U R' U U2 R' U2 R U R' U R
(3,10,8,6)(7,9)         => R U R' U R U2 R' U R U' R' U' R U2 R' U' R U R'
(3,10,8,6)(5,7)         => R U2 R' U R U R' U' R U2 R' U' R U' R'
(3,10,8,6)(5,9)         => U R U R' U R U2 R' U R' U' R U' R' U' U' R U' R U R' U'
(3,10,8,6)(4,7,5,9)     => U' R U2 R' U' R U' R' U R U' R' U' R U' U' R' U' R U' R' U'
(3,10,8,6)(4,7,9,5)     => U R' U2 R U R' U R U2 R U R' U'
(3,10,8,6)(4,7)         => R U' R' U2 R U' R' U'
(3,10,8,6)(4,9)         => U R U R' U2 R' U' R U' R' U2 R U'
(3,10,8,6)(4,9,7,5)     => U R U R' U R U' U2 R' U' R U2 R' U' R U R'
(3,10,8,6)(4,9,5,7)     => U R U R' U'
(3,10,8,6)(4,5,7,9)     => R U R' U R U R' U' R' U' R U' R' U2 R U2 R U2 R' U' R U' R' U'
(3,10,8,6)(4,5,9,7)     => U' R U2 R' U' R U' R2 U2 R U R' U R2 U' R' U' R U2 R' U' R U R'
(3,10,8,6)(4,5)         => R U2 R' U R U' R' U' R U' R' U'
(3,6,8,10)(4,7,5,9)     => U R U' R' U'
(3,6,8,10)(4,7)         => U R U R' U2 R U R'
(3,6,8,10)(4,7,9,5)     => R U' R' U R U2 R' U R U R2 U' R U' R' U2 R2 U R' U R U2 R' U
(3,6,8,10)(7,9)         => R U' R' U R U2 R' U R U R' U' R U2 R' U' R U' R'
(3,6,8,10)(5,9)         => U R U' R' U R' U U R U R' U R U' R U2 R' U' R U' R' U'
(3,6,8,10)(5,7)         => R U R' U R U2 R' U R U' R' U' R U2 R'
(3,6,8,10)(4,5)         => U R U R' U R U R' U' R U2 R'
(3,6,8,10)(4,5,9,7)     => U R U' R' U2 R' U' R U' R' U2 R U'
(3,6,8,10)(4,5,7,9)     => R U' R' U R U2 R' U R U2 U R' U' R U' R' U'
(3,6,8,10)(4,9)         => U R' U2 R U R' U R U2 R U' R' U'
(3,6,8,10)(4,9,7,5)     => U R U R' U R U2 R' U2 R' U2 R U R' U R U R U' R' U' R U' R'
(3,6,8,10)(4,9,5,7)     => U' R U2 R' U' R U' R' U R U' R' U' R U2 R' U' R U R' U'
(2,5,9)                 => R U R' U R U2 R' U R U' R' U2 R U2 R'
(2,5)(7,9)              => U' R U2 R' U' R U' R' U2 U' R U' R' U2 R U' R' U' R U R'
(2,5,7)                 => R U R' U R U2 R' U2
(2,5,9,7,4)             => U' R U2 R' U' R U' R' U' R' U' R U' R' U' U' R2 U' R' U2 R U' R' U' R U R'
(2,5,4)                 => U R U R' U R U2 R' U
(2,5,7,9,4)             => U' R U2 R' U' R U' R' U' R' U' R U' R' U2 R U' U' R U' R' U2 R U' U' R' U'
(2,5,9,4,7)             => U R U' R' U R U R' U2 R U R2 U' R U' R' U2 R U'
(2,5,4,7,9)             => U R U R' U R U R' U2 R U2 R'
(2,5)(4,7)              => U' R U2 R' U' R U' R2 U2 R U R' U R U
(2,5,7,4,9)             => U' R U2 R' U' R U' R2 U2 R U R' U R2 U' R' U2 R U2 R'
(2,5)(4,9)              => U' R U2 R' U' R U' R' U' R U' R' U2 R U2 R' U'
(2,5,4,9,7)             => U R U2 R' U2 R U R' U2 R' U2 R U R' U R
(2,5,7)(3,8)(6,10)      => R U R' U2 R U R' U U2 R U R' U R U2 R' U
(2,5)(3,8)(6,10)(7,9)   => R' U' R U' R' U2 R U R U R'
(2,5,9)(3,8)(6,10)      => U' R U R' U U R' U U R U R' U R
(2,5)(3,8)(4,9)(6,10)   => U' R U2 R' U' R U' R' U' R' U' R U' R' U' U' R U' U2 R U' R' U2 R U' R' U' R U' R' U'
(2,5,7,4,9)(3,8)(6,10)  => U R U R' U R U R' U2 R U R2 U' R U' R' U2 R U'
(2,5,4,9,7)(3,8)(6,10)  => U R U R' U R U2 R' U R U R' U R U2 R' U R U R'
(2,5,9,7,4)(3,8)(6,10)  => U2 U R U R' U R U R' U R U2 R' U
(2,5,7,9,4)(3,8)(6,10)  => R U' R' U2 R U R' U R U2 R' U
(2,5,4)(3,8)(6,10)      => R U R' U2 R U R' U R' U' R U' R' U2 R2 U R' U R U2 R' U
(2,5)(3,8)(4,7)(6,10)   => R' U' R U' R' U2 R R U' R' U2 R U' R'
(2,5,9,4,7)(3,8)(6,10)  => U' R U2 R' U' R U' R' U' U' R U' R' U' U' R U' R' U' R U' R' U'
(2,5,4,7,9)(3,8)(6,10)  => R U' R2 U' R U' R' U2 R2 U R' U R U2 R' U
(2,5,9,7)(3,10,8,6)     => R' U' R U' R' U2 R U' U2 R U' R' U' R U2 R' U' R U R'
(2,5,7,9)(3,10,8,6)     => R U R' U R U R' U' R' U' R U' R' U2 R U'
(2,5)(3,10,8,6)         => R U2 R' U R U R' U
(2,5,9)(3,10,8,6)(4,7)  => U' R U2 R' U' R U' R' U R U' R'
(2,5,4,7)(3,10,8,6)     => R U R' U R U' U' R' U2 R U' R' U2 R U' R' U'
(2,5)(3,10,8,6)(4,7,9)  => R U R' U R U R' U U R' U U R U R' U R U R U R' U R U2 R' U
(2,5,9,4)(3,10,8,6)     => R' U' R U' R' U2 R2 U' R' U' R U' U' R' U' R U' R' U'
(2,5,4)(3,10,8,6)(7,9)  => R U R' U R U R' U U R U2 R' U' R U' R'
(2,5,7,4)(3,10,8,6)     => U R U R' U R U2 R' U R U' R' U2 R U' R' U'
(2,5,7)(3,10,8,6)(4,9)  => U R U2 R' U R U2 R' U
(2,5)(3,10,8,6)(4,9,7)  => U R U R' U R' U2 R U R' U R
(2,5,4,9)(3,10,8,6)     => U' R U2 R' U' R U' R' U' R' U' R U' R' U' U' R2 U' R'
(2,5,7,4)(3,6,8,10)     => U R' U2 R U R' U R2 U' R' U' R U2 R'
(2,5,4)(3,6,8,10)(7,9)  => U' R U2 R' U' R U' R' U' R U R' U R U2 R' U' U' R U' R' U' R U' R'
(2,5,9,4)(3,6,8,10)     => U R U' R' U R' U U R U R' U R
(2,5,7)(3,6,8,10)(4,9)  => U R U R' U R U2 R' U R U R' U R U2 R' U' R U' R' U'
(2,5)(3,6,8,10)(4,9,7)  => U' R U2 R' U' R U' R' U' R' U' R U' R' U' U' R U' U' R U' R' U' R U' R'
(2,5,4,9)(3,6,8,10)     => R U R' U R U R' U' R U R'
(2,5,7,9)(3,6,8,10)     => R U' R' U R U2 R' U R U R' U
(2,5)(3,6,8,10)         => U' R U' R' U' R U2 R'
(2,5,9,7)(3,6,8,10)     => U' R U2 R' U' R U' R' U' R U' R' U' R U' R'
(2,5,9)(3,6,8,10)(4,7)  => U2 R U2 R' U
(2,5)(3,6,8,10)(4,7,9)  => R' U' R U' R' U' U' R U' R U' R' U'
(2,5,4,7)(3,6,8,10)     => U R U R' U U R U R' U R U R' U R U2 R' U
(2,9,7)(3,8)(6,10)      => R U R' U R U2 R' U R U R'
(2,9,5)(3,8)(6,10)      => R' U' R U' R' U2 R U2 R U' R' U
(2,9)(3,8)(5,7)(6,10)   => R' U' R U' R' U2 R U2 R U' R' U' R U' U' R' U' R U' R'
(2,9,4)(3,8)(6,10)      => R U R' U R U U R' U R U R' U2 R U2 R' U' R U' R' U R U R' U R U2 R' U
(2,9,7,5,4)(3,8)(6,10)  => U R U R' U R U' R'
(2,9,5,7,4)(3,8)(6,10)  => U R U R' U R U2 R' U2 R' U2 R U R' U R U R U' R' U
(2,9)(3,8)(4,7)(6,10)   => U R U R' U R U2 R' U2 R' U2 R U R' U R U R U' R' U' R U' U' R' U' R U' R'
(2,9,5,4,7)(3,8)(6,10)  => R U R' U R U U R' U R U R' U' R' U' R U' R' U2 R U'
(2,9,4,7,5)(3,8)(6,10)  => U R' U2 R U R' U R2 U' R' U' U' R U' R' U' R U' R' U'
(2,9,7,4,5)(3,8)(6,10)  => U' R U2 R' U' R U' R2 U2 R U R' U R2 U R'
(2,9,4,5,7)(3,8)(6,10)  => U' R U' R' U' U' R U' R' U' R U' R' U'
(2,9)(3,8)(4,5)(6,10)   => U R U R' U R U2 R' U R U R' U R U2 R' U2 R U' R' U' R U' U' R' U' R U' R'
(2,9,5,7)(3,10,8,6)     => U' R U2 R' U' R U' R' U' R U R' U R U2 R' U' R U R' U'
(2,9,7,5)(3,10,8,6)     => U' R U' R' U' R U2 R' U' R U R'
(2,9)(3,10,8,6)         => U R U R' U R U2 R' U R' U' R U' R' U2 R2 U' R'
(2,9)(3,10,8,6)(4,5,7)  => U2 R U' R'
(2,9,4,5)(3,10,8,6)     => R U' R' U R U' R' U' R U' R'
(2,9,7)(3,10,8,6)(4,5)  => R U' R' U R U R' U R' U' R U' R' U2 R U'
(2,9,4)(3,10,8,6)(5,7)  => U2 R U' R' U' R U' U' R' U' R U' R' U'
(2,9,7,4)(3,10,8,6)     => U R' U2 R U R' U R2 U' R' U' R U2 R' U' R U R'
(2,9,5,4)(3,10,8,6)     => U' R U2 R' U' R U' R' U' R' U' R U' R' U' U' R U' R U R' U'
(2,9,4,7)(3,10,8,6)     => R U' R' U R U R' U2
(2,9,5)(3,10,8,6)(4,7)  => U' R U2 R' U2
(2,9)(3,10,8,6)(4,7,5)  => U R' U2 R U R' U R U' R U' R'
(2,9,5)                 => R U2 R' U2 R U R' U' R U2 R' U' R U' R'
(2,9)(5,7)              => R' U' R U' R' U2 R U2 U' R U' R' U2 R U2 R'
(2,9,7)                 => R U2 R' U2 R U R' U
(2,9,4,5,7)             => R U R' U R U' U' R' U2 R U' R' U2 R U2 R' U'
(2,9,7,4,5)             => R U2 R' U2 R U' R' U' R U' R' U'
(2,9)(4,5)              => U R U R' U R U2 R' U R U R' U R U2 R' U R U' R' U2 R U2 R'
(2,9)(4,7)              => U R U R' U R U2 R' U2 R' U2 R U R' U R2 U' R' U2 R U2 R'
(2,9,4,7,5)             => R U2 R' U2 R U R2 U' R U' R' U2 R2 U R' U R U2 R' U
(2,9,5,4,7)             => R U2 R' U2 R U R2 U' R U' R' U2 R U'
(2,9,5,7,4)             => U' R U2 R' U' R U' R2 U2 R U R' U R2 U' R' U2 R U' R' U' R U R' U'
(2,9,4)                 => U R U R' U R U2 R' U R U' R' U2 R U2 R' U'
(2,9,7,5,4)             => R U U R' U2 R U R' U2 R U R' U R U2 R' U
(2,9,4)(3,6,8,10)(5,7)  => U R U R' U R U2 R' U2 R U' R' U'
(2,9,5,4)(3,6,8,10)     => R U R2 U2 R U R' U R
(2,9,7,4)(3,6,8,10)     => R U' R' U' R U' R' U' R U2 R' U' R U' R' U'
(2,9)(3,6,8,10)         => R U R2 U2 R U R' U R U' R U2 R' U' R U' R' U'
(2,9,5,7)(3,6,8,10)     => R U R' U R' U' R U' R' U2 R2 U R' U R U2 R' U
(2,9,7,5)(3,6,8,10)     => U R' U2 R U R' U R U R U' R' U' R U' R'
(2,9,7)(3,6,8,10)(4,5)  => R U' R' U' R U' R'
(2,9)(3,6,8,10)(4,5,7)  => R U R' U R' U' R U' R' U2 R U'
(2,9,4,5)(3,6,8,10)     => R U R2 U U R U R' U R U R U R' U R U2 R' U
(2,9,4,7)(3,6,8,10)     => R U R' U R U2 R' U' R U' R' U'
(2,9,5)(3,6,8,10)(4,7)  => R U R' U' R U R' U R U2 R' U
(2,9)(3,6,8,10)(4,7,5)  => R U R' U2
(2,7)(3,8)(5,9)(6,10)   => R U R' U R U2 R' U2 R U' R' U
(2,7,5)(3,8)(6,10)      => U' R U2 R' U' R U' R' U2 U' R U' R' U2 R U' R'
(2,7,9)(3,8)(6,10)      => R U' R' U' R U' U' R' U' R U' R'
(2,7,4)(3,8)(6,10)      => R U R' U2 R U' R' U' R U' R'
(2,7,9,5,4)(3,8)(6,10)  => U R U R' U R U2 R' U R U' R' U
(2,7,5,9,4)(3,8)(6,10)  => U' R U R' U2 R U2 R' U' R U' R' U R U R' U R U2 R' U
(2,7,4,5,9)(3,8)(6,10)  => U R' U2 R U R' U R U R U' R' U' R U' U' R' U' R U' R'
(2,7)(3,8)(4,5)(6,10)   => U' R U2 R' U' R U' R' U' R U R' U R U R' U2 R U' R'
(2,7,9,4,5)(3,8)(6,10)  => R U R' U R U2 R' U R U' R' U' U' R U' R' U' R U' R' U'
(2,7,4,9,5)(3,8)(6,10)  => U' R U2 R' U' R U' R2 U2 R U R' U R U R U' R' U
(2,7)(3,8)(4,9)(6,10)   => U R U R' U R U R' U' U' R U' R' U' R U' R' U'
(2,7,5,4,9)(3,8)(6,10)  => U R U R' U R U R' U U R U R' U
(2,7)(3,10,8,6)         => R U2 R' U R U R' U2 U R' U2 R U R' U R
(2,7,9,5)(3,10,8,6)     => R U R' U R U R' U R U R' U R U2 R' U
(2,7,5,9)(3,10,8,6)     => U' R U2 R' U' R U' R2 U2 R U R' U R U' R U' R'
(2,7,4)(3,10,8,6)(5,9)  => U R U R' U R U2 R' U2 R U R' U'
(2,7,5,4)(3,10,8,6)     => U' R U2 R' U' R U' R' U' R' U' R U' R' U2 R U' U' R U' R' U2 R U' R' U'
(2,7,9,4)(3,10,8,6)     => R U R' U R U R' U' R U2 R' U' R U' R' U'
(2,7,4,9)(3,10,8,6)     => U R U R' U R U2 R' U' R U' R'
(2,7)(3,10,8,6)(4,9,5)  => R U R' U R U2 R' U' R U R' U'
(2,7,5)(3,10,8,6)(4,9)  => U R U R' U R U2 R' U' R U' R' U' R U2 R' U' R U' R' U'
(2,7)(3,10,8,6)(4,5,9)  => U R U' R' U R U2 R' U R U R' U R' U' R U' R' U2 R U'
(2,7,4,5)(3,10,8,6)     => U' R U2 R' U' R U' R' U' R U' R' U' U' R U' R' U'
(2,7,9)(3,10,8,6)(4,5)  => R U R' U R U R'
(2,7,9)                 => U' R U' R' U2 R U2 R'
(2,7,5)                 => R' U' R U' R' U2 R U2
(2,7)(5,9)              => U' R U' R' U' U' R U' R' U' R U R' U'
(2,7,4)                 => U R U R' U R U2 R' U2 R' U2 R U R' U R U
(2,7,5,9,4)             => U R U' R' U R U R' U U R U R' U U R U R' U R U2 R' U
(2,7,9,5,4)             => R U' R' U R U R' U2 R U' R' U' R U' R'
(2,7)(4,9)              => U R U R' U R U2 R' U R U R' U R U2 R' U2 R U' R' U2 R U2 R' U'
(2,7,5,4,9)             => U R U U R' U2 R U R' U2 R U2 R' U' R U' R'
(2,7,4,9,5)             => U R' U2 R U R' U R2 U' R' U2 R U' R' U' R U R' U'
(2,7,4,5,9)             => U R' U2 R U R' U R2 U' R' U2 R U2 R'
(2,7,9,4,5)             => R' U' R U' R' U2 R U' U' R U' R' U2 R U' U' R' U'
(2,7)(4,5)              => U R U R' U R U2 R' U R U R' U R U2 R' U2
(2,7,9,4)(3,6,8,10)     => U' R U2 R' U' R U' R' U' R' U' R U' R' U' U' R U' R U' R' U'
(2,7,4)(3,6,8,10)(5,9)  => U2 R U' R' U' R U2 R' U' R U R' U'
(2,7,5,4)(3,6,8,10)     => U R U R' U R U2 R' U R U R' U R U2 R' U R U' R' U' R U2 R'
(2,7,9)(3,6,8,10)(4,5)  => U R' U2 R U R' U R U' R U' R' U' R U R'
(2,7)(3,6,8,10)(4,5,9)  => U R U' R' U R U2 R' U' R U' R'
(2,7,4,5)(3,6,8,10)     => U R U R' U U R U R' U U R U2 R' U' R U' R'
(2,7,5)(3,6,8,10)(4,9)  => U' R U2 R' U' R U2 R' U'
(2,7,4,9)(3,6,8,10)     => U2 R U' R' U' R U R'
(2,7)(3,6,8,10)(4,9,5)  => U R' U2 R U R' U R U' R U' R' U' R U2 R' U' R U R' U'
(2,7,9,5)(3,6,8,10)     => R U' R' U R U2 R' U R U R' U2 U R' U2 R U R' U R
(2,7)(3,6,8,10)         => R' U' R U' R' U2 R U' U2 R U' R' U' R U2 R'
(2,7,5,9)(3,6,8,10)     => U R U' R' U R U2 R' U' R U' R' U R U R' U R U2 R' U
(2,4,7,9,5)             => R U' R' U R U R' U2 R U R' R' U2 R U R' U R U R U R' U R U2 R' U
(2,4,7)                 => U' R U2 R' U' R U' R' U' R U R' U R U2 R' U2
(2,4,7,5,9)             => U' R U2 R' U' R U' R' U' R' U' R U' R' U2 R U2 U' R U' R' U2 R U2 R'
(2,4,5)                 => U' R U2 R' U' R U' R' U'
(2,4,5,7,9)             => U' R U2 R' U' R U' R' U' U' R U' R' U' U' R U2 R'
(2,4,5,9,7)             => R U R' U R U R' U2 R U' R' U' R U R'
(2,4,9,7,5)             => U' R U2 R' U' R U' R2 U2 R U R' U R U' R U' R' U' U' R U' R' U' R U R'
(2,4,9,5,7)             => U' R U2 R' U' R U' R' U' U' R U' R' U' U' R U' R' U' R U R' U'
(2,4,9)                 => U R U2 R' U2 R U R' U' R U2 R' U' R U' R' U'
(2,4)(7,9)              => U R U R' U R U2 R' U' R U' R' U' U' R U' R' U' R U R'
(2,4)(5,9)              => U' R U2 R' U' R U' R' U' R U R' U R U2 R' U R U' R' U2 R U' R' U' R U R' U'
(2,4)(5,7)              => U' R U2 R' U' R U' R' U' R' U' R U' R' U' U' R U2
(2,4,7,5)(3,6,8,10)     => U R U R' U2 R U R' U' R U2 R' U' R U' R' U'
(2,4,7)(3,6,8,10)(5,9)  => U R U' R' U2 R U2 R' U' R U' R' U'
(2,4,7,9)(3,6,8,10)     => R U' R' U R U2 R' U R U R2 U' R U' R' U2 R U'
(2,4,9,5)(3,6,8,10)     => U R U R' U R U U R' U R U R2 U2 R U R' U R
(2,4,9)(3,6,8,10)(5,7)  => U R U R' U R U U R' U R U R' U2
(2,4,9,7)(3,6,8,10)     => U R U R' U R U2 R' U R U' R' U' R U' R'
(2,4,5)(3,6,8,10)(7,9)  => R U R' U R U2 R' U' U' R U' R' U' R U' R'
(2,4,5,7)(3,6,8,10)     => U' R U2 R' U' R U' R' U' R' U' R U' R' U' U' R U R U' R' U' R U2 R'
(2,4,5,9)(3,6,8,10)     => U R U' R' U R' U U R U R' U R U R U R' U R U2 R' U
(2,4)(3,6,8,10)         => U' R U2 R' U' R U' R' U' U' R U' R' U' R U2 R'
(2,4)(3,6,8,10)(5,9,7)  => U' R U2 R' U' R U' R2 U2 R U R' U R U R U' R' U' R U' R'
(2,4)(3,6,8,10)(5,7,9)  => R' U' R U' R' U2 R2 U' R' U' R U2 R' U' R U R' U'
(2,4,7,9)(3,10,8,6)     => U R U R' U R U2 R' U R U R' U R U R'
(2,4,7)(3,10,8,6)(5,9)  => U R U' R' U R U2 R' U R U R' U2
(2,4,7,5)(3,10,8,6)     => R U2 R' U R U R2 U' R U' R' U2 R U'
(2,4)(3,10,8,6)(5,9,7)  => U R U' R' U R U2 R' U R U R2 U2 R U R' U R
(2,4)(3,10,8,6)         => R U2 R' U R U R' U U R U R' U R U2 R' U
(2,4)(3,10,8,6)(5,7,9)  => U R U R' U R U2 R' U2 R' U2 R U R' U R U2 R U R' U'
(2,4,9,5)(3,10,8,6)     => R' U' R U' R' U' U' R U' R U R' U'
(2,4,9,7)(3,10,8,6)     => U R U R' U R' U U R U R' U R U R U R' U R U2 R' U
(2,4,9)(3,10,8,6)(5,7)  => U R U R' U2 R U2 R' U' R U' R' U'
(2,4,5,9)(3,10,8,6)     => R' U' R U' R' U2 R2 U' R'
(2,4,5)(3,10,8,6)(7,9)  => R U R' U R U R' U U R U2 R' U' R U' R' U R U R' U R U2 R' U
(2,4,5,7)(3,10,8,6)     => R U2 R' U R U R' U' R U2 R' U' R U' R' U' R U2 R' U' R U' R' U'
(2,4,5,9,7)(3,8)(6,10)  => U' R U R' U' R U2 R' U' R U' R' U'
(2,4,5,7,9)(3,8)(6,10)  => R U R' U' R U' R' U'
(2,4,5)(3,8)(6,10)      => U' R U2 R' U' R U' R2 U2 R U R' U R U' R U' R' U2 R U' R'
(2,4,7,9,5)(3,8)(6,10)  => U' R U2 R' U' R U' R' U' R U' R' U
(2,4,7,5,9)(3,8)(6,10)  => U' R U R' U' R' U' R U' R' U2 R U2 R U2 R' U' R U' R' U'
(2,4,7)(3,8)(6,10)      => R U R' U R U R' U2 R U' R'
(2,4)(3,8)(5,7)(6,10)   => U R U R' U R U2 R' U' R U' R' U2 R U' R'
(2,4)(3,8)(5,9)(6,10)   => U' R U2 R' U' R U' R' U' R' U' R U' R' U' U' R U' U' R U' R' U
(2,4)(3,8)(6,10)(7,9)   => U' R U2 R' U' R U' R' U' R' U' R U' R' U' U' R U R U R'
(2,4,9,7,5)(3,8)(6,10)  => U' R U2 R' U' R U' R' U2 R U R'
(2,4,9)(3,8)(6,10)      => U' R U2 R' U' R U' R' U' R U R' U R U2 R' U2 R U' R' U' R U' U' R' U' R U' R'
(2,4,9,5,7)(3,8)(6,10)  => U' R U2 R' U' R U' R' U' R U R' U R U2 R' U2 R U' R' U
(1,6,8,3)(2,4,7,5)      => U'
(1,6,8,3)(2,4,7,9)      => U R' U2 R U R' U R U' R U' R' U2 R U2 R'
(1,6,8,3)(2,4,7)(5,9)   => U R' U2 R U R' U R U' R U' R' U' U' R U' R' U' R U R' U'
(1,6,8,3)(2,4,5)(7,9)   => R U' R' U R U R' U U R U R' U U2 R' U2 R U R' U R
(1,6,8,3)(2,4,5,9)      => U R U' R' U R U R' U2 R U R' U' R' U' R U' R' U2 R U'
(1,6,8,3)(2,4,5,7)      => U R U2 R' U' R U' R'
(1,6,8,3)(2,4,9,5)      => U R U U R' U2 R U R' U R' U2 R U R' U R
(1,6,8,3)(2,4,9)(5,7)   => U2 R U' R' U2 R U2 R'
(1,6,8,3)(2,4,9,7)      => U R U2 R' U2 R U R' U R U2 R' U' R U' R'
(1,6,8,3)(2,4)          => U R' U2 R U R' U R
(1,6,8,3)(2,4)(5,9,7)   => U R U R' U R U2 R' U R U R' U R U2 R' U' R U' R' U' U' R U' R' U' R U R'
(1,6,8,3)(2,4)(5,7,9)   => R U' R' U R U R' U U R U R' U
(1,6,10,8)(2,4,7)(5,9)  => U' R U R' U'
(1,6,10,8)(2,4,7,9)     => R U' R'
(1,6,10,8)(2,4,7,5)     => R U R' U2 R U R' U' R U2 R' U' R U' R'
(1,6,10,8)(2,4,5,9)     => U R' U2 R U R' U R U R U' R'
(1,6,10,8)(2,4,5)(7,9)  => R U' R' U2 R U2 R' U' R U' R'
(1,6,10,8)(2,4,5,7)     => U2 R U' R' U2 R U' R' U'
(1,6,10,8)(2,4)(5,9,7)  => U' R U R' U R' U2 R U R' U R
(1,6,10,8)(2,4)(5,7,9)  => R U' R' U2 R' U2 R U R' U R
(1,6,10,8)(2,4)         => R U R' U2 R U R' U
(1,6,10,8)(2,4,9,5)     => U R' U2 R U R' U R2 U R' U'
(1,6,10,8)(2,4,9,7)     => U R U R' U R U R' U2 R U R' U' R' U' R U' R' U2 R U'
(1,6,10,8)(2,4,9)(5,7)  => U R U R' U R U2 R' U R' U' R U' R' U2 R U2 R U' R'
(1,6)(2,4,7,9,5)(3,10)  => R U R' U R U2 R' U R U' R' U' R U2 R' U' R U R' U'
(1,6)(2,4,7)(3,10)      => R U2 R' U R U R' U' R U2 R' U' R U' R' U'
(1,6)(2,4,7,5,9)(3,10)  => R U R' U R U2 R' U R U' R' U' R U R'
(1,6)(2,4,5,9,7)(3,10)  => U R U R' U R U2 R' U R' U' R U' R' U2 R U' R U' R' U' R U' R'
(1,6)(2,4,5,7,9)(3,10)  => R U R' U R U2 R' U R U2 R' U
(1,6)(2,4,5)(3,10)      => R' U' R U' R' U2 R U2 R U' R' U' R U2 R'
(1,6)(2,4,9,7,5)(3,10)  => U R U' R' U' R U' R'
(1,6)(2,4,9,5,7)(3,10)  => U R U R2 U2 R U R' U R
(1,6)(2,4,9)(3,10)      => U R U R' U2
(1,6)(2,4)(3,10)(7,9)   => U R' U2 R U R' U R U' U' R U' R' U' R U' R'
(1,6)(2,4)(3,10)(5,9)   => U' R U2 R' U' R U' R2 U2 R U R' U R2 U' R' U' R U2 R' U' R U R' U'
(1,6)(2,4)(3,10)(5,7)   => U R U R' U R U2 R' U2 R' U2 R U R' U R U R U' R' U' R U2 R'
(1,6,3,8,10)(2,4,5,9,7) => U R U' R' U2
(1,6,3,8,10)(2,4,5)     => U R U R' U2 R U R' U'
(1,6,3,8,10)(2,4,5,7,9) => U R' U2 R U R' U R U R U' R' U' U' R U' R' U' R U' R'
(1,6,3,8,10)(2,4,7,9,5) => R U' R' U R U2 R' U R U R' U' R U2 R' U' R U' R' U'
(1,6,3,8,10)(2,4,7,5,9) => U R U' R2 U2 R U R' U R
(1,6,3,8,10)(2,4,7)     => R U R' U R U2 R' U R U' R' U' R U2 R' U'
(1,6,3,8,10)(2,4)(5,7)  => U R U R' U R U R' U' R U2 R' U'
(1,6,3,8,10)(2,4)(5,9)  => U R U R' U' R U' R'
(1,6,3,8,10)(2,4)(7,9)  => U R U R' U R U2 R' U R' U' R U' R' U' U' R U' R U' R' U2
(1,6,3,8,10)(2,4,9,7,5) => U R' U2 R U R' U R U2 R U' R' U2
(1,6,3,8,10)(2,4,9,5,7) => U R U R' U R U2 R' U2 R' U2 R U R' U R U R U' R' U' R U' R' U'
(1,6,3,8,10)(2,4,9)     => R U' R' U' U' R U' R' U' R U' R'
(1,6,8,3)(4,7,5,9)      => R U R' U R U2 R' U R U' R' U2 R U2 R' U'
(1,6,8,3)(4,7,9,5)      => U' R U2 R' U' R U' R' U2 U' R U' R' U2 R U' R' U' R U R' U'
(1,6,8,3)(4,7)          => R U R' U R U2 R' U
(1,6,8,3)(5,9)          => U' R U2 R' U' R U' R' U' R' U' R U' R' U' U' R2 U' R' U2 R U' R' U' R U R' U'
(1,6,8,3)(5,7)          => U R U R' U R U2 R'
(1,6,8,3)(7,9)          => U' R U2 R' U' R U' R2 U2 R U R' U R U2 R U' R' U2 R U' R' U' R U R'
(1,6,8,3)(4,5,9,7)      => U R U R' U R U2 R' U2 R U' R' U2 R U' R' U' R U R'
(1,6,8,3)(4,5,7,9)      => U R U R' U R U R' U2 R U2 R' U'
(1,6,8,3)(4,5)          => U' R U2 R' U' R U' R2 U2 R U R' U R
(1,6,8,3)(4,9)          => U' R U2 R' U' R U' R2 U2 R U R' U R2 U' R' U2 R U2 R' U'
(1,6,8,3)(4,9,7,5)      => R U R' U R U2 R' U' R U' R' U' U' R U' R' U' R U R'
(1,6,8,3)(4,9,5,7)      => U R U2 R' U U R U2 R' U R U2 R' U
(1,6,10,8)(4,7)         => U R U R' U R U2 R' U R U R' U R U R' U2 R U' R' U'
(1,6,10,8)(4,7,9,5)     => R U' R' U R U R' U R U2 R' U
(1,6,10,8)(4,7,5,9)     => U' R U2 R' U R U2 R' U
(1,6,10,8)(4,9,7,5)     => U' R U2 R' U' R U' R' U' R U R' U R U' U' R' U' R U' R' U' R U2 R' U' R U R'
(1,6,10,8)(4,9)         => U R U R' U R U R' U U R U R' U U R U2 R' U' R U' R'
(1,6,10,8)(4,9,5,7)     => U R U R' U R U2 R' U R U R' U R U2 R' U R U R' U'
(1,6,10,8)(5,9)         => U R U R' U R U2 R' U2 R' U2 R U R' U R2 U R' U'
(1,6,10,8)(7,9)         => U' R U2 R' U' R U2 R' U' R U2 R' U' R U R'
(1,6,10,8)(5,7)         => U R U R' U R U2 R' U2 R' U2 R U R' U R U' R U' R' U' U' R U' R' U'
(1,6,10,8)(4,5)         => R' U' R U' R' U2 R R U' R' U2 R U' R' U'
(1,6,10,8)(4,5,9,7)     => U' R U R' U R' U U R U R' U R U R U R' U R U2 R' U
(1,6,10,8)(4,5,7,9)     => U R U R' U R U2 R' U R U' R' U' R U' U' R' U' R U' R' U'
(1,6)(3,10)(4,7)(5,9)   => R' U' R U' R' U2 R U' U2 R U' R' U' R U2 R' U' R U R' U'
(1,6)(3,10)(4,7,9)      => R U R' U R U R' U R U2 R' U' R U' R'
(1,6)(3,10)(4,7,5)      => R U2 R' U R U R'
(1,6)(3,10)(4,5,9)      => U' R U2 R' U' R U' R' U R U' R' U'
(1,6)(3,10)(4,5,7)      => R U' R' U' R U2 R'
(1,6)(3,10)(4,5)(7,9)   => U' R U2 R' U' R U' R2 U2 R U R' U R U' U' R U' R' U' R U' R'
(1,6)(3,10)(5,9,7)      => U R U R' U R U2 R' U2 R U' R' U' R U' R'
(1,6)(3,10)(5,7,9)      => R U R' U R U R' U2 R U2 R' U' R U' R' U'
(1,6)(3,10)             => U R U R' U R U2 R' U R' U' R U' R' U2 R U2 R U' R' U' R U2 R'
(1,6)(3,10)(4,9,7)      => R U R' U R U' U' R' U' R U' R' U' R U' R'
(1,6)(3,10)(4,9,5)      => U R U R' U' R U R' U R U2 R' U
(1,6)(3,10)(4,9)(5,7)   => U' R U2 R' U' R U' R' U' R' U' R U' R' U' U' R2 U' R' U'
(1,6,3,8,10)            => U R U R' U2 R U2 R' U R U2 R' U
(1,6,3,8,10)(5,7,9)     => U' R U2 R' U' R U' R' U' R U R' U R U2 R' U' U' R U' R' U' R U' R' U'
(1,6,3,8,10)(5,9,7)     => U R U' R' U' R U R' U R U2 R' U
(1,6,3,8,10)(4,9,7)     => U R U R' U R U2 R' U R U R' U R U2 R' U' R U' R' U2
(1,6,3,8,10)(4,9,5)     => U' R U2 R' U' R U' R' U' R' U' R U' R' U' U' R U' U' R U' R' U' R U' R' U'
(1,6,3,8,10)(4,9)(5,7)  => R U R' U R U R' U' R U R' U'
(1,6,3,8,10)(4,7,9)     => R U' R' U R U2 R' U R U R'
(1,6,3,8,10)(4,7,5)     => U' R U' R' U' R U2 R' U'
(1,6,3,8,10)(4,7)(5,9)  => U' R U2 R' U' R U' R' U' R U' R' U' R U' R' U'
(1,6,3,8,10)(4,5,9)     => U R U R' U' R U' R' U R U R' U R U2 R' U
(1,6,3,8,10)(4,5)(7,9)  => R' U' R U' R' U' U' R U' R U' R' U2
(1,6,3,8,10)(4,5,7)     => U R U R' U U R U R' U R U2 R' U' R U' R' U R U R' U R U2 R' U
(1,6,10,8)(2,9,5)(4,7)  => R U R' U R U2 R' U R U R' U'
(1,6,10,8)(2,9)(4,7,5)  => R' U' R U' R' U2 R U2 R U' R'
(1,6,10,8)(2,9,4,7)     => R U R' U R U U R' U R U U R' U R U2 R' U
(1,6,10,8)(2,9,7,5)     => U R U R' U R U2 R' U R U R' U R U2 R' U' R U' R' U' R U2 R' U' R U R'
(1,6,10,8)(2,9,5,7)     => U R U R' U R U' R' U'
(1,6,10,8)(2,9)         => U R U R' U R U2 R' U2 R' U2 R U R' U R U R U' R'
(1,6,10,8)(2,9,4,5)     => R U R' U R U U R' U R U R' U2 R' U' R U' R' U2 R U'
(1,6,10,8)(2,9)(4,5,7)  => R U R' U R U U R' U R U R' U R U2 R' U' R U' R'
(1,6,10,8)(2,9,7)(4,5)  => R U R' U R U U R' U R U R' U R' U U R U R' U R U R U R' U R U2 R' U
(1,6,10,8)(2,9,5,4)     => U' R U2 R' U' R U' R2 U2 R U R' U R2 U R' U'
(1,6,10,8)(2,9,7,4)     => R' U' R U' R' U' U' R U' R U' R' U' R U2 R' U' R U R'
(1,6,10,8)(2,9,4)(5,7)  => R U R' U R U U R' U R U R' U R U2 R' U' R U' R' U' R U2 R' U' R U' R' U'
(1,6)(2,9)(3,10)(4,7)   => R' U' R U' R' U2 R U' U2 R U' R' U' R U R'
(1,6)(2,9,5,4,7)(3,10)  => U' R U' R' U' R U2 R' U' R U R' U'
(1,6)(2,9,4,7,5)(3,10)  => U R U R' U R U2 R' U R' U' R U' R' U2 R2 U' R' U'
(1,6)(2,9,4)(3,10)      => U2 R U' R' U'
(1,6)(2,9,7,5,4)(3,10)  => U' R U2 R' U' R U2 R' U' R U' R'
(1,6)(2,9,5,7,4)(3,10)  => R U' R' U R U R' U' R U2 R' U' R U' R'
(1,6)(2,9,7)(3,10)      => R U' R' U R U R' U U R U R' U R U2 R' U
(1,6)(2,9,5)(3,10)      => R U' R' U R U R2 U' R U' R' U2 R U'
(1,6)(2,9)(3,10)(5,7)   => U R U R' U R U2 R' U R U R' U R U2 R' U R U' R' U' R U R'
(1,6)(2,9,7,4,5)(3,10)  => R U' R' U R U R' U
(1,6)(2,9)(3,10)(4,5)   => U R U R' U R U2 R' U2 R' U2 R U R' U R2 U' R' U' R U R'
(1,6)(2,9,4,5,7)(3,10)  => U R' U2 R U R' U R U' R U' R' U'
(1,6,8,3)(2,9)(4,7,5)   => R U2 R' U2 R U R' U' R U2 R' U' R U' R' U'
(1,6,8,3)(2,9,4,7)      => R U2 R' U U R U R' U R U R' U R U2 R' U
(1,6,8,3)(2,9,5)(4,7)   => R U2 R' U2 R U R'
(1,6,8,3)(2,9,7,4)      => U' R U2 R' U' R U2 R' U2 R U' R' U' R U R'
(1,6,8,3)(2,9,5,4)      => R' U' R U' R' U2 R R U' R' U2 R U' R' U' R U R' U'
(1,6,8,3)(2,9,4)(5,7)   => U R U R' U R U2 R' U R U R' U R U2 R' U R U' R' U2 R U2 R' U'
(1,6,8,3)(2,9,4,5)      => R U2 R' U2 R U R' U' R' U' R U' R' U2 R U'
(1,6,8,3)(2,9,7)(4,5)   => R U2 R' U2 R U R' U2 R' U2 R U R' U R U R U R' U R U2 R' U
(1,6,8,3)(2,9)(4,5,7)   => R U U R' U2 R U R' U2 R U2 R' U' R U' R'
(1,6,8,3)(2,9)          => U' R U2 R' U' R U' R' U' R' U' R U' R' U' U' R2 U' R' U2 R U2 R'
(1,6,8,3)(2,9,7,5)      => R U2 R' U2 R U R' U2 R' U2 R U R' U R U' R U2 R' U' R U' R' U'
(1,6,8,3)(2,9,5,7)      => R U U R' U2 R U R' U2 R U2 R' U' R U' R' U R U R' U R U2 R' U
(1,6,3,8,10)(2,9,7)     => R U R2 U' R U' R' U2 R U'
(1,6,3,8,10)(2,9)(5,7)  => R U R' U2 R U R' U R U2 R' U
(1,6,3,8,10)(2,9,5)     => R U R' U' R U2 R' U' R U' R' U' R U2 R' U' R U' R' U'
(1,6,3,8,10)(2,9,4,7,5) => R U R' U2 U R' U2 R U R' U R
(1,6,3,8,10)(2,9)(4,7)  => R U R' U' R' U U R U R' U R U R U R' U R U2 R' U
(1,6,3,8,10)(2,9,5,4,7) => U R' U2 R U R' U R U R U' R' U' R U' R' U'
(1,6,3,8,10)(2,9,5,7,4) => R U' R' U' R U' R' U'
(1,6,3,8,10)(2,9,4)     => R U R' U' R U2 R' U' R U' R'
(1,6,3,8,10)(2,9,7,5,4) => R U R2 U' R U' R' U2 R2 U R' U R U2 R' U
(1,6,3,8,10)(2,9,7,4,5) => R U R' U R U2 R' U' R U' R' U2
(1,6,3,8,10)(2,9)(4,5)  => U' R U2 R' U' R U' R' U' R U' R' U' U' R U' R' U' R U' R'
(1,6,3,8,10)(2,9,4,5,7) => R U R' U
(1,6,10,8)(2,5,9)(4,7)  => R U R' U R U2 R' U2 R U' R'
(1,6,10,8)(2,5,4,7)     => U' R U2 R' U' R U' R' U2 U' R U' R' U2 R U' R' U'
(1,6,10,8)(2,5)(4,7,9)  => R U' R' U' R U' U' R' U' R U' R' U'
(1,6,10,8)(2,5)         => R U R' U2 R U' R' U' R U' R' U'
(1,6,10,8)(2,5,7,9)     => U R U R' U R U2 R' U R U' R'
(1,6,10,8)(2,5,9,7)     => U R' U2 R U R' U R U2 R U' R' U' R U2 R' U' R U R'
(1,6,10,8)(2,5,9,4)     => U R' U2 R U R' U R U R U' R' U' R U' U' R' U' R U' R' U'
(1,6,10,8)(2,5,7,4)     => U' R U2 R' U' R U' R' U' R U R' U R U R' U2 R U' R' U'
(1,6,10,8)(2,5,4)(7,9)  => U R U' R' U' R U2 R' U' R U R'
(1,6,10,8)(2,5,4,9)     => U' R U2 R' U' R U' R2 U2 R U R' U R U R U' R'
(1,6,10,8)(2,5)(4,9,7)  => U R U R' U R U2 R' U R' U' R U' R' U' U' R U' R U' R' U' R U2 R' U' R U R'
(1,6,10,8)(2,5,7)(4,9)  => U R U R' U R U R' U2 R U R'
(1,6)(2,5)(3,10)(4,7)   => U' R U2 R' U' R U' R' U' R U' R' U' R U' U' R'
(1,6)(2,5,4,7,9)(3,10)  => U' R U' R' U' R U R'
(1,6)(2,5,9,4,7)(3,10)  => U' R U2 R' U' R U' R2 U2 R U R' U R U' R U' R' U'
(1,6)(2,5,9)(3,10)      => U R' U2 R U R' U R2 U' R' U' R U R'
(1,6)(2,5,7)(3,10)      => R U2 R' U R U R' U' R' U' R U' R' U2 R2 U R' U R U2 R' U
(1,6)(2,5)(3,10)(7,9)   => U R U R' U R U2 R' U2 R' U2 R U R' U R U' U' R U' R' U' R U' R'
(1,6)(2,5)(3,10)(4,9)   => U R U R' U R U2 R' U' R U' R' U'
(1,6)(2,5,7,4,9)(3,10)  => U R U R2 U2 R U R' U R U' R U2 R' U' R U' R' U'
(1,6)(2,5,4,9,7)(3,10)  => R' U' R U' R' U2 R U' R U' R' U' R U' R'
(1,6)(2,5,9,7,4)(3,10)  => U R U' R' U R U2 R' U R U R' U' R U2 R' U' R U' R'
(1,6)(2,5,4)(3,10)      => R U2 R' U R U R' U U R' U U R U R' U R
(1,6)(2,5,7,9,4)(3,10)  => R U R' U R U R' U'
(1,6,8,3)(2,5)(4,7,9)   => U' R U' R' U2 R U2 R' U'
(1,6,8,3)(2,5,4,7)      => R' U' R U' R' U2 R U
(1,6,8,3)(2,5,9)(4,7)   => U R U' R' U R U R' U2 R U R'
(1,6,8,3)(2,5)          => U R U R' U R U2 R' U2 R' U2 R U R' U R
(1,6,8,3)(2,5,9,7)      => U R U R' U R U2 R' U R' U' R U' R' U2 R U' R U' R' U2 R U' R' U' R U R'
(1,6,8,3)(2,5,7,9)      => R U' R' U R U R' U2 R U' R' U' R U' R' U'
(1,6,8,3)(2,5)(4,9,7)   => U R U' R' U2 R U' R' U' R U R'
(1,6,8,3)(2,5,7)(4,9)   => U R U2 R' U2 R U R' U2 R U2 R' U' R U' R' U'
(1,6,8,3)(2,5,4,9)      => R' U' R U' R' U2 R R U' R' U2 R U2 R'
(1,6,8,3)(2,5,9,4)      => U R' U2 R U R' U R2 U' R' U2 R U2 R' U'
(1,6,8,3)(2,5,4)(7,9)   => U R' U2 R U R' U R U2 R U' R' U2 R U' R' U' R U R'
(1,6,8,3)(2,5,7,4)      => U R U R' U R U2 R' U R U R' U R U2 R' U
(1,6,3,8,10)(2,5)(7,9)  => U' R U2 R' U' R U' R' U' R' U' R U' R' U' U' R U' R U' R' U2
(1,6,3,8,10)(2,5,9)     => U R U R' U' R U' R' U' R U2 R' U' R U' R' U'
(1,6,3,8,10)(2,5,7)     => U R U R' U R U2 R' U R U R' U R U2 R' U R U' R' U' R U2 R' U'
(1,6,3,8,10)(2,5,7,9,4) => U R' U2 R U R' U R U' R U' R' U' R U R' U'
(1,6,3,8,10)(2,5,9,7,4) => U R U' R' U R U2 R' U' R U' R' U'
(1,6,3,8,10)(2,5,4)     => U R U R' U2 R U R' U2 R U2 R' U' R U' R' U'
(1,6,3,8,10)(2,5,4,9,7) => U' R U2 R' U' R U2 R' U2
(1,6,3,8,10)(2,5)(4,9)  => U2 R U' R' U' R U R' U'
(1,6,3,8,10)(2,5,7,4,9) => R U R' U R U' U' R' U2 R U' R' U2 R U' R' U' R U' R'
(1,6,3,8,10)(2,5,4,7,9) => R U' R' U R U U R' U R U R' U R U R' U R U2 R' U
(1,6,3,8,10)(2,5)(4,7)  => R' U' R U' R' U2 R U' U2 R U' R' U' R U2 R' U'
(1,6,3,8,10)(2,5,9,4,7) => U R U' R2 U2 R U R' U R U' R U2 R' U' R U' R' U'
(1,6,8,3)(2,7,9)(4,5)   => U' R U2 R' U' R U' R2 U2 R U R' U R U' R U' R' U2 R U2 R'
(1,6,8,3)(2,7,4,5)      => U2 R' U' R U' R' U2 R U'
(1,6,8,3)(2,7)(4,5,9)   => U' R U2 R' U' R U' R' U' R' U' R U' R' U2 R U2 U' R U' R' U2 R U2 R' U'
(1,6,8,3)(2,7,5,4)      => U' R U2 R' U' R U' R' U2
(1,6,8,3)(2,7,9,4)      => U' R U2 R' U' R U' R' U' U' R U' R' U' U' R U2 R' U'
(1,6,8,3)(2,7,4)(5,9)   => R U R' U R U R' U2 R U' R' U' R U R' U'
(1,6,8,3)(2,7)(4,9,5)   => U R U2 R' U2 R U R' U2 R' U' R U' R' U2 R2 U R' U R U2 R' U
(1,6,8,3)(2,7,4,9)      => R U R' U R U R' U2 R U2 R'
(1,6,8,3)(2,7,5)(4,9)   => U' R U2 R' U' R U' R' U' R U R' U R U2 R' U R U' R' U2 R U2 R' U'
(1,6,8,3)(2,7,9,5)      => U R U R' U R U2 R' U' R U' R' U' U' R U' R' U' R U R' U'
(1,6,8,3)(2,7,5,9)      => U R U R' U R U2 R' U' R U' R' U2 R U2 R'
(1,6,8,3)(2,7)          => U2 R' U' R U' R' U2 R2 U R' U R U2 R' U
(1,6,3,8,10)(2,7)(4,5)  => U' R U2 R' U' R U' R' U' R U R' U R U2 R' U R U' R' U' R U2 R' U'
(1,6,3,8,10)(2,7,4,5,9) => U R U' R' U R' U' R U' R' U2 R U2 R U2 R' U' R U' R' U'
(1,6,3,8,10)(2,7,9,4,5) => R U' R' U R U2 R' U R U R' U2 R U2 R' U' R U' R'
(1,6,3,8,10)(2,7,5,4,9) => R' U' R U' R' U2 R U' U' R U' R' U2 R U' R' U' R U' R'
(1,6,3,8,10)(2,7)(4,9)  => U R U R' U R U U R' U R U R' U
(1,6,3,8,10)(2,7,4,9,5) => U R U R' U R U2 R' U R U' R' U' R U' R' U'
(1,6,3,8,10)(2,7,9,5,4) => R U R' U R U2 R' U' U' R U' R' U' R U' R' U'
(1,6,3,8,10)(2,7,4)     => U R U R' U U R U R' U U R' U' R U' R' U2 R2 U R' U R U2 R' U
(1,6,3,8,10)(2,7,5,9,4) => U R U' R' U R' U' R U' R' U2 R2 U R' U R U2 R' U
(1,6,3,8,10)(2,7,5)     => U' R U2 R' U' R U' R' U' U' R U' R' U' R U2 R' U'
(1,6,3,8,10)(2,7)(5,9)  => U R U' R' U R' U' R U' R' U2 R U'
(1,6,3,8,10)(2,7,9)     => U R U R' U R U2 R' U2 R' U2 R U R' U R U R U' R' U' U' R U' R' U' R U' R'
(1,6)(2,7,9,4,5)(3,10)  => R U R' U R U R' U R' U2 R U R' U R
(1,6)(2,7,4,5,9)(3,10)  => U R U' R' U R U2 R' U R U R' U
(1,6)(2,7)(3,10)(4,5)   => R U R' U R U2 R' U2 R U' R' U' R U2 R'
(1,6)(2,7)(3,10)(5,9)   => U' R U2 R' U' R U' R' U' U' R U' R' U' R U2 R' U' R U R' U'
(1,6)(2,7,5)(3,10)      => U' R U2 R' U' R U' R2 U2 R U R' U R U R U' R' U' R U2 R'
(1,6)(2,7,9)(3,10)      => U' R U2 R' U' R U' R' U' U' R U' R' U' R U R'
(1,6)(2,7,5,4,9)(3,10)  => U R U R' U R' U' R U' R' U2 R U'
(1,6)(2,7,4,9,5)(3,10)  => U R U R' U R' U' R U' R' U2 R2 U R' U R U2 R' U
(1,6)(2,7)(3,10)(4,9)   => U R U R' U R U2 R' U2 R' U2 R U R' U R U' R U' R' U'
(1,6)(2,7,5,9,4)(3,10)  => R' U' R U' R' U2 R2 U' R' U'
(1,6)(2,7,9,5,4)(3,10)  => R U R' U R U R' U R' U2 R U R' U R U' R U2 R' U' R U' R' U'
(1,6)(2,7,4)(3,10)      => U R U R' U R U2 R' U R U' R' U' R U2 R'
(1,6,10,8)(2,7,4)(5,9)  => U' R U2 R' U' R U' R' U' R U R' U R U2 R' U R U R' U'
(1,6,10,8)(2,7,9,4)     => U' R U2 R' U' R U' R' U' R U' R' U' R U' U' R' U' R U' R' U'
(1,6,10,8)(2,7,5,4)     => R U R' U2 R U R2 U' R U' R' U2 R U'
(1,6,10,8)(2,7,9)(4,5)  => U' R U2 R' U' R U' R' U' R U' R'
(1,6,10,8)(2,7)(4,5,9)  => U' R U R' U2 R' U' R U' R' U2 R U'
(1,6,10,8)(2,7,4,5)     => R U R' U R U R' U2 R U' R' U'
(1,6,10,8)(2,7)         => U R U R' U R U2 R' U' R U' R' U' U' R U' R' U'
(1,6,10,8)(2,7,5,9)     => U' R U2 R' U' R U' R' U' R' U' R U' R' U' U' R U' U' R U' R'
(1,6,10,8)(2,7,9,5)     => R U' R' U' R' U' R U' R' U2 R2 U R' U R U2 R' U
(1,6,10,8)(2,7)(4,9,5)  => U' R U2 R' U' R U' R' U2 R U R' U'
(1,6,10,8)(2,7,5)(4,9)  => U R U R' U R U R' U2 R U R' U U R' U2 R U R' U R
(1,6,10,8)(2,7,4,9)     => U' R U2 R' U' R U' R' U' R U R' U R U2 R' U2 R U' R'
(1,8)(2,7)(3,6)(4,5)    => U2
(1,8)(2,7,9,4,5)(3,6)   => U R' U2 R U R' U R U' R U' R' U2 R U2 R' U'
(1,8)(2,7,4,5,9)(3,6)   => R' U' R U' R' U2 R U' R U' R' U2 R U2 R'
(1,8)(2,7,9,5,4)(3,6)   => R U' R' U R U R' U U R U R' U R U R' U R U2 R' U
(1,8)(2,7,5,9,4)(3,6)   => U R U' R' U R U R' U U R U R' U R U2 R' U' R U' R'
(1,8)(2,7,4)(3,6)       => U R U2 R' U' R U' R' U'
(1,8)(2,7,5,4,9)(3,6)   => U R U2 R' U2 R U R' U U2 R U R' U R U2 R' U
(1,8)(2,7)(3,6)(4,9)    => U2 R U' R' U2 R U2 R' U'
(1,8)(2,7,4,9,5)(3,6)   => U R U2 R' U2 R U R' U R U2 R' U' R U' R' U'
(1,8)(2,7,5)(3,6)       => U R' U2 R U R' U R U'
(1,8)(2,7)(3,6)(5,9)    => U R U R' U R U2 R' U R U R' U R U2 R' U' R U' R' U' U' R U' R' U' R U R' U'
(1,8)(2,7,9)(3,6)       => R U' R' U R U R' U2 R U R'
(1,8,6,10,3)(2,7,4,5,9) => U' R U R' U2
(1,8,6,10,3)(2,7,9,4,5) => R U' R' U'
(1,8,6,10,3)(2,7)(4,5)  => R U R' U2 R U R' U' R U2 R' U' R U' R' U'
(1,8,6,10,3)(2,7,5,9,4) => U R' U2 R U R' U R U R U' R' U'
(1,8,6,10,3)(2,7,9,5,4) => R U' R' U2 R U2 R' U' R U' R' U'
(1,8,6,10,3)(2,7,4)     => R U R' U U R U R' U R U R' U R U2 R' U
(1,8,6,10,3)(2,7)(5,9)  => U' R U R' U' R U R' U R U2 R' U
(1,8,6,10,3)(2,7,9)     => U R U2 R' U
(1,8,6,10,3)(2,7,5)     => R U R' U2 R U R'
(1,8,6,10,3)(2,7,5,4,9) => U R U R' U R U2 R' U2 R U' R' U' R U R'
(1,8,6,10,3)(2,7,4,9,5) => U R U R' U R U R' U U R U R' U R U2 R' U' R U' R'
(1,8,6,10,3)(2,7)(4,9)  => U R U R' U R U2 R' U R' U' R U' R' U2 R U2 R U' R' U'
(1,8,3,10)(2,7,9)(4,5)  => U R U R' U R U2 R' U2 R U' R' U' U' R U' R' U' R U' R'
(1,8,3,10)(2,7,4,5)     => U R U R' U R U2 R' U R U R' U R U2 R' U2 R U' R' U' R U2 R' U'
(1,8,3,10)(2,7)(4,5,9)  => R U R' U R U2 R' U R U' R' U' R U R' U'
(1,8,3,10)(2,7,4)(5,9)  => U R U R' U R U2 R' U R' U' R U' R' U2 R U' R U' R' U' R U' R' U'
(1,8,3,10)(2,7,9,4)     => U R U R' U R U R' U' R U R' U'
(1,8,3,10)(2,7,5,4)     => R' U' R U' R' U2 R U2 R U' R' U' R U2 R' U'
(1,8,3,10)(2,7)(4,9,5)  => U R U' R' U' R U' R' U'
(1,8,3,10)(2,7,4,9)     => U R U R' U U R U R' U R U2 R' U
(1,8,3,10)(2,7,5)(4,9)  => U R U R' U
(1,8,3,10)(2,7,9,5)     => R U R' U R U' R' U' R U' R'
(1,8,3,10)(2,7,5,9)     => R U R' U R U2 R' U' R U' R' U' U' R U' R' U' R U' R'
(1,8,3,10)(2,7)         => R U2 R' U R U R' U2 R' U' R U' R' U2 R U'
(1,8,10,6)(2,7,4)(5,9)  => U R U' R' U
(1,8,10,6)(2,7,5,4)     => U R U R' U U R U R' U U
(1,8,10,6)(2,7,9,4)     => U R' U2 R U R' U R U R U' R' U' U' R U' R' U' R U' R' U'
(1,8,10,6)(2,7,9)(4,5)  => U' R U2 R' U' R U' R' U' R' U' R U' R' U' U' R U' R U' R' U' R U' U' R' U' R U' R'
(1,8,10,6)(2,7)(4,5,9)  => U R U' R' U2 R U R' U R U2 R' U
(1,8,10,6)(2,7,4,5)     => U R U R' U2 R U R' U U2 R U R' U R U2 R' U
(1,8,10,6)(2,7)         => U R U R' U U R U R' U R U2 R' U' R U' R' U'
(1,8,10,6)(2,7,5,9)     => U R U R' U' R U' R' U'
(1,8,10,6)(2,7,9,5)     => R U' R' U R U2 R' U R U R' U2 R' U' R U' R' U2 R U'
(1,8,10,6)(2,7)(4,9,5)  => U R' U2 R U R' U R U2 R U' R' U
(1,8,10,6)(2,7,4,9)     => U' R U2 R' U' R U2 R' U' R U2 R' U' R U' R'
(1,8,10,6)(2,7,5)(4,9)  => R U' R' U' U' R U' R' U' R U' R' U'
(1,8)(2,4,5,9,7)(3,6)   => U' R U2 R' U' R U' R' U' R U' R' U' U' R U' R' U' R U R'
(1,8)(2,4,5,7,9)(3,6)   => R U R' U R U2 R' U' R U' R' U2 R U2 R'
(1,8)(2,4,5)(3,6)       => R U R' U R U2 R'
(1,8)(2,4,7,5,9)(3,6)   => U' R U2 R' U' R U' R2 U2 R U R' U R U2 R U' R' U2 R U2 R'
(1,8)(2,4,7)(3,6)       => U R U R' U R U2 R' U'
(1,8)(2,4,7,9,5)(3,6)   => R U' R' U R U R' U2 R U R' U' R' U' R U' R' U2 R2 U R' U R U2 R' U
(1,8)(2,4)(3,6)(5,9)    => U R U R' U R U2 R' U2 R U' R' U2 R U' R' U' R U R' U'
(1,8)(2,4)(3,6)(7,9)    => U' R U2 R' U' R U' R' U' R U R' U R U' U' R' U2 R U' R' U2 R U' R' U' R U R'
(1,8)(2,4)(3,6)(5,7)    => U' R U2 R' U' R U' R2 U2 R U R' U R U'
(1,8)(2,4,9,7,5)(3,6)   => U R U2 R' U2 R U R' U R' U' R U' R' U2 R2 U R' U R U2 R' U
(1,8)(2,4,9,5,7)(3,6)   => R U R' U R U2 R' U' R U' R' U' U' R U' R' U' R U R' U'
(1,8)(2,4,9)(3,6)       => U R U R' U R U2 R' U2 R U' R' U2 R U2 R'
(1,8,6,10,3)(2,4,5)     => U R' U2 R U R' U R U' R U' R' U' R U2 R'
(1,8,6,10,3)(2,4,5,7,9) => R U' R' U R U2 R' U' R U' R' U R U R' U R U2 R' U
(1,8,6,10,3)(2,4,5,9,7) => U' R U' R' U' R U' R' U R U R' U R U2 R' U
(1,8,6,10,3)(2,4,9,5,7) => U' R U2 R' U' R U' R' U' R U R' U R U' U' R' U' R U' R' U' R U2 R' U' R U R' U'
(1,8,6,10,3)(2,4,9,7,5) => U R U R' U R U R' U2 R U R' U2 R U2 R' U' R U' R' U'
(1,8,6,10,3)(2,4,9)     => U' R U2 R' U' R U' R' U' R' U' R U' R' U' U' R U' R U' R' U' R U R'
(1,8,6,10,3)(2,4,7,5,9) => U' R U2 R' U' R U2 R' U' R U2 U' R'
(1,8,6,10,3)(2,4,7,9,5) => U' R U2 R' U' R U2 R' U' R U2 R' U' R U R' U'
(1,8,6,10,3)(2,4,7)     => U2 R U' R' U' R U2 R'
(1,8,6,10,3)(2,4)(5,7)  => U R U R' U R U2 R' U R' U' R U' R' U2 R2 U' R' U' R U2 R'
(1,8,6,10,3)(2,4)(5,9)  => U' R U R' U R' U' R U' R' U2 R2 U R' U R U2 R' U
(1,8,6,10,3)(2,4)(7,9)  => R' U' R U' R' U2 R U' U2 R U' R' U' R U' R'
(1,8,3,10)(2,4,5,9)     => U R U' R' U R U U R' U R U R' U R U R' U R U2 R' U
(1,8,3,10)(2,4,5)(7,9)  => R U R' U R U R' U R U2 R' U' R U' R' U'
(1,8,3,10)(2,4,5,7)     => R U2 R' U R U R' U'
(1,8,3,10)(2,4)(5,9,7)  => U' R U2 R' U' R U' R' U2 U' R U' R' U2
(1,8,3,10)(2,4)         => R U' R' U' R U2 R' U'
(1,8,3,10)(2,4)(5,7,9)  => R U R' U R U R2 U U R U R' U R U R U R' U R U2 R' U
(1,8,3,10)(2,4,7)(5,9)  => U R U R' U R U2 R' U2 R U' R' U' R U' R' U'
(1,8,3,10)(2,4,7,9)     => U' R U2 R' U' R U2 R' U' U' R U' R' U' R U' R'
(1,8,3,10)(2,4,7,5)     => R U2 R' U R U R' U R' U2 R U R' U R
(1,8,3,10)(2,4,9,5)     => R U R' U R U' U' R' U' R U' R' U' R U' R' U'
(1,8,3,10)(2,4,9)(5,7)  => U R U R' U' R U2 R' U' R U' R' U R U R' U R U2 R' U
(1,8,3,10)(2,4,9,7)     => U R U R2 U' R U' R' U2 R2 U R' U R U2 R' U
(1,8,10,6)(2,4,7,5)     => U R U R' U2 R U' R' U' R U' R' U R U R' U R U2 R' U
(1,8,10,6)(2,4,7,9)     => R' U' R U' R' U' U' R U' R U' R' U' R U' U' R' U' R U' R'
(1,8,10,6)(2,4,7)(5,9)  => U R U' R' U' R U2 R' U' R U' R' U R U R' U R U2 R' U
(1,8,10,6)(2,4,9,5)     => U R U R' U R U U R' U R U R' U' R' U' R U' R' U2 R U'
(1,8,10,6)(2,4,9)(5,7)  => U R U R' U R U2 R' U R U R' U R U2 R' U' R U' R' U' R U' U' R' U' R U' R'
(1,8,10,6)(2,4,9,7)     => U R U R' U R U2 R' U2 R' U2 R U R' U R U R U R'
(1,8,10,6)(2,4,5)(7,9)  => R U' R' U R U2 R' U R U R' U'
(1,8,10,6)(2,4,5,7)     => U R' U2 R U R' U R2 U' R' U2 R U' R'
(1,8,10,6)(2,4,5,9)     => U R U' R2 U' R U' R' U2 R2 U R' U R U2 R' U
(1,8,10,6)(2,4)(5,9,7)  => R' U' R U' R' U2 R U2 R U R'
(1,8,10,6)(2,4)(5,7,9)  => R' U' R U' R' U' U' R U' R U' R' U
(1,8,10,6)(2,4)         => U' R U' R' U2 R U' R'
(1,8,6,10,3)(2,9)(4,5)  => R U R' U R U U R' U R U R' U2
(1,8,6,10,3)(2,9,4,5,7) => R' U' R U' R' U2 R U2 R U' R' U'
(1,8,6,10,3)(2,9,7,4,5) => U R U R' U R U R' U' R U' R'
(1,8,6,10,3)(2,9,5,4,7) => R U R' U R U U R' U R U R2 U2 R U R' U R
(1,8,6,10,3)(2,9)(4,7)  => U R' U2 R U R' U R U2 R U' R' U' R U R'
(1,8,6,10,3)(2,9,4,7,5) => U R U R' U R U2 R' U2 R' U2 R U R' U R U R U' R' U'
(1,8,6,10,3)(2,9,7,5,4) => R U R' U R U2 R' U R U' R' U' R U' R'
(1,8,6,10,3)(2,9,4)     => R U R' U R U U R' U R U R' U R U2 R' U' R U' R' U'
(1,8,6,10,3)(2,9,5,7,4) => R U R' U R U U R' U R U R' U R' U' R U' R' U2 R2 U R' U R U2 R' U
(1,8,6,10,3)(2,9)(5,7)  => U R U' R' U' R U R'
(1,8,6,10,3)(2,9,5)     => R' U' R U' R' U' U' R U' R U' R' U' R U2 R' U' R U R' U'
(1,8,6,10,3)(2,9,7)     => U' R U2 R' U' R U' R2 U2 R U R' U R2 U' R' U' R U' R'
(1,8,3,10)(2,9,4,5)     => R U2 U R' U R U R' U R U R' U R U2 R' U
(1,8,3,10)(2,9)(4,5,7)  => R U' R' U R U R' U' R' U' R U' R' U2 R2 U R' U R U2 R' U
(1,8,3,10)(2,9,7)(4,5)  => R U' R' U R U R' U U R' U U R U R' U R
(1,8,3,10)(2,9,7,5)     => U2 R U' R' U2
(1,8,3,10)(2,9,5,7)     => U' R U2 R' U' R U2 R' U' R U' R' U'
(1,8,3,10)(2,9)         => R U' R' U R U R' U' R U2 R' U' R U' R' U'
(1,8,3,10)(2,9,5)(4,7)  => U' R U2 R' U' R U' R' U' R' U' R U' R' U' U' R U' R U' R' U' R U' R' U'
(1,8,3,10)(2,9)(4,7,5)  => R U' R' U R U R' U2 R U2 R' U' R U' R'
(1,8,3,10)(2,9,4,7)     => U R U R' U R U2 R' U R U R' U R U2 R' U R U' R' U' R U R' U'
(1,8,3,10)(2,9,5,4)     => R U' R' U R U R'
(1,8,3,10)(2,9,4)(5,7)  => R U' R' U R U R' U' R' U' R U' R' U2 R U'
(1,8,3,10)(2,9,7,4)     => U R' U2 R U R' U R U' R U' R' U2
(1,8)(2,9,4,5,7)(3,6)   => U' R U2 R' U' R U' R' U2 U' R U' R' U2 R U2 R' U'
(1,8)(2,9,7,4,5)(3,6)   => U R' U2 R U R' U R U R U' R' U2 R U' R' U' R U R'
(1,8)(2,9)(3,6)(4,5)    => U R U' R' U2 R U2 R'
(1,8)(2,9,5)(3,6)       => R U2 R' U2 R U2 R' U R U2 R' U
(1,8)(2,9)(3,6)(5,7)    => U R' U2 R U R' U R U2 R U' R' U2 R U2 R'
(1,8)(2,9,7)(3,6)       => R U' R' U2 R U' R' U' R U R'
(1,8)(2,9,7,5,4)(3,6)   => R U2 R' U2 R U R' U R U2 R' U' R U' R'
(1,8)(2,9,5,7,4)(3,6)   => R U2 R' U2 R U R' U2 R' U' R U' R' U2 R2 U R' U R U2 R' U
(1,8)(2,9,4)(3,6)       => R U2 R' U2 R U R' U2 R U2 R' U' R U' R' U'
(1,8)(2,9,4,7,5)(3,6)   => U' R U2 R' U' R U' R' U' R' U' R U' R' U' U' R2 U' R' U2 R U2 R' U'
(1,8)(2,9,5,4,7)(3,6)   => R U U R' U2 R U R' U R' U2 R U R' U R
(1,8)(2,9)(3,6)(4,7)    => U R U R' U R U2 R' U R' U' R U' R' U2 R U' R U' R' U2 R U2 R'
(1,8,10,6)(2,9,5)(4,7)  => R U R' U2 R U2 R' U' R U' R'
(1,8,10,6)(2,9,4,7)     => R U R' U2 R U2 R' U' R U' R' U R U R' U R U2 R' U
(1,8,10,6)(2,9)(4,7,5)  => R U R' U R U2 R' U' R U' R' U' R U' U' R' U' R U' R'
(1,8,10,6)(2,9,7)(4,5)  => U R' U2 R U R' U R U R U R'
(1,8,10,6)(2,9,4,5)     => R U R' U' R' U' R U' R' U2 R2 U R' U R U2 R' U
(1,8,10,6)(2,9)(4,5,7)  => R U R' U U R' U U R U R' U R
(1,8,10,6)(2,9)         => R U R' U' R' U' R U' R' U2 R U2 R U2 R' U' R U' R' U'
(1,8,10,6)(2,9,7,5)     => R U R' U' R U2 R' U' R U' R' U'
(1,8,10,6)(2,9,5,7)     => R U R' U U R' U U R U R' U R U R U R' U R U2 R' U
(1,8,10,6)(2,9,5,4)     => R U R' U' R' U' R U' R' U2 R U'
(1,8,10,6)(2,9,4)(5,7)  => U' R U2 R' (U' R U' R' (U' R U' R' U')2
(1,8,10,6)(2,9,7,4)     => R U R'
(1,8,6,10,3)(4,5,9)     => R U R' U R U2 R' U2 R U' R' U'
(1,8,6,10,3)(4,5,7)     => U R U R' U R U2 R' U R U R' U R U R' U' R U2 R'
(1,8,6,10,3)(4,5)(7,9)  => R U' R' U2 R' U' R U' R' U2 R U2 R U2 R' U' R U' R' U'
(1,8,6,10,3)(4,7,5)     => R' U' R U' R' U2 R2 U' R' U' R U2 R'
(1,8,6,10,3)(4,7,9)     => R U' R' U R' U U R U R' U R
(1,8,6,10,3)(4,7)(5,9)  => U' R U R2 U2 R U R' U R
(1,8,6,10,3)(5,9,7)     => U' R U' R' U' R U' R' U' R U2 R' U' R U' R' U'
(1,8,6,10,3)            => R U R' U2 R U R' U U R' U2 R U R' U R
(1,8,6,10,3)(5,7,9)     => U R U' R' U' R U2 R' U' R U R' U'
(1,8,6,10,3)(4,9)(5,7)  => U' R U2 R' U' R U' R2 U2 R U R' U R U R U' R' U'
(1,8,6,10,3)(4,9,5)     => U R U R' U R U R' U U R U R' U U R' U' R U' R' U2 R U'
(1,8,6,10,3)(4,9,7)     => U R U R' U R U R' U2 R U R' U'
(1,8,3,10)(4,5)         => U' R U2 R' U' R U' R' U' R U' R' U' R U' U' R' U'
(1,8,3,10)(4,5,7,9)     => U' R U' R' U' R U R' U'
(1,8,3,10)(4,5,9,7)     => U' R U2 R' U' R U' R2 U2 R U R' U R U' R U' R' U2
(1,8,3,10)(4,7,5,9)     => U R' U2 R U R' U R2 U' R' U' R U R' U'
(1,8,3,10)(4,7)         => R U2 R' U R U R' U R' U U R U R' U R U R U R' U R U2 R' U
(1,8,3,10)(4,7,9,5)     => R U R' U R U R' U R' U' R U' R' U2 R U'
(1,8,3,10)(4,9,7,5)     => U R U R' U R U2 R' U' R U' R' U2
(1,8,3,10)(4,9)         => U R U R' U2 U R' U2 R U R' U R
(1,8,3,10)(4,9,5,7)     => R' U' R U' R' U2 R U' R U' R' U' R U' R' U'
(1,8,3,10)(5,9)         => U R U' R' U R U2 R' U R U R' U' R U2 R' U' R U' R' U'
(1,8,3,10)(5,7)         => R U2 R' U R U2 R' U R U2 R' U
(1,8,3,10)(7,9)         => R U R' U R U R' U U
(1,8)(3,6)(4,5)(7,9)    => U R U R' U R U2 R' U R U R' U R U2 R' U2 R U' R' U2 R U' R' U' R U R'
(1,8)(3,6)(4,5,7)       => R' U' R U' R' U2 R
(1,8)(3,6)(4,5,9)       => U R U' R' U R U R' U2 R U R' U'
(1,8)(3,6)(4,7,5)       => R' U2 R U R' U R
(1,8)(3,6)(4,7)(5,9)    => U R U R' U R U2 R' U R' U' R U' R' U2 R U' R U' R' U2 R U' R' U' R U R' U'
(1,8)(3,6)(4,7,9)       => U R U R' U R U2 R' U2 R' U2 R U R' U R U' R U' R' U2 R U2 R' U'
(1,8)(3,6)(4,9,5)       => U R U' R' U2 R U' R' U' R U R' U'
(1,8)(3,6)(4,9,7)       => U R U2 R' U2 R U R' U R' U' R U' R' U2 R U2 R U2 R' U' R U' R' U'
(1,8)(3,6)(4,9)(5,7)    => R' U' R U' R' U2 R R U' R' U2 R U2 R' U'
(1,8)(3,6)(5,9,7)       => R' U' R U' R' U2 R U' U' R U' R' U2 R U' R' U' R U R'
(1,8)(3,6)(5,7,9)       => R U' R' U R U R' U2 R U R' U U R' U2 R U R' U R
(1,8)(3,6)              => U R U R' U R U2 R' U R U R' U R U2 R'
(1,8,10,6)(4,7,9,5)     => U' R U2 R' U' R U' R' U' R' U' R U' R' U' U' R U' R U' R' U
(1,8,10,6)(4,7,5,9)     => U R U R' U R U2 R' U R U' R' U' U' R U' R' U' R U' R' U'
(1,8,10,6)(4,7)         => U R U R' U2 R U' R' U' R U' R' U' R U2 R' U' R U' R' U'
(1,8,10,6)(7,9)         => R U' R' U R U2 R' U R U2 R' U R U2 R' U
(1,8,10,6)(5,9)         => U R U' R2 U' R U' R' U2 R U2 R U2 R' U' R U' R' U'
(1,8,10,6)(5,7)         => U' R U2 R' U' R U' R' U' R' U' R U' R' U' U' R U' U2 R U' R' U2 R U' R'
(1,8,10,6)(4,9,5,7)     => U' R U2 R' U' R U2 R' U
(1,8,10,6)(4,9,7,5)     => U' R U2 R' U' R U' R' U' R' U' R U' R' U' U' R U2 R U R'
(1,8,10,6)(4,9)         => R U R' U R U' U' R' U2 R U' R' U2 R U' R' U' R U' R' U'
(1,8,10,6)(4,5,7,9)     => U' R U2 R' U' R U' R2 U2 R U R' U R U R U' R' U' U' R U' R' U' R U' R' U'
(1,8,10,6)(4,5)         => U R U R' U2 R U R' R' U2 R U R' U R
(1,8,10,6)(4,5,9,7)     => U' R U2 R' U' R U' R' U' R U R'
(1,8)(2,5,7,9,4)(3,6)   => U' R U2 R' U' R U' R2 U2 R U R' U R U' R U' R' U2 R U2 R' U'
(1,8)(2,5,4)(3,6)       => R U2 R' U' R U' R'
(1,8)(2,5,9,7,4)(3,6)   => U' R U2 R' U' R U' R2 U2 R U R' U R U R U' R' U2 R U' R' U' R U R'
(1,8)(2,5,7)(3,6)       => U R' U' R U' R' U2 R U'
(1,8)(2,5)(3,6)(7,9)    => R U R' U R U' U' R' U2 R U' R' U2 R U' R' U' R U R'
(1,8)(2,5,9)(3,6)       => U' R U2 R' U' R U2 R' U2 R U2 R'
(1,8)(2,5,7,4,9)(3,6)   => U' R U2 R' U' R U' R' U' R' U' R U' R' U2 R U' R U' R' U2 R U2 R'
(1,8)(2,5)(3,6)(4,9)    => R U R' U R U R' U2 R U2 R' U'
(1,8)(2,5,4,9,7)(3,6)   => U R U2 R' U2 R U R' U R' U' R U' R' U2 R U'
(1,8)(2,5,4,7,9)(3,6)   => R U' R' U R U R' U2 R U R' U' R' U' R U' R' U2 R U'
(1,8)(2,5,9,4,7)(3,6)   => U R U R' U R U2 R' U' R U' R' U2 R U2 R' U'
(1,8)(2,5)(3,6)(4,7)    => U' R U2 R' U' R U' R' U' R' U' R U' R' U' U' R
(1,8,10,6)(2,5,7,4)     => R U R' U R U2 R' U R U' R' U2 R U' R'
(1,8,10,6)(2,5,9,4)     => U R U' R2 U' R U' R' U2 R U'
(1,8,10,6)(2,5,4)(7,9)  => R U R' U R U2 R' U2 R U R'
(1,8,10,6)(2,5,7)(4,9)  => R' U' R U' R' U2 R U' U' R U' R' U2 R U' R' U' R U' R' U'
(1,8,10,6)(2,5)(4,9,7)  => U R U R' U R U2 R' U R U R'
(1,8,10,6)(2,5,4,9)     => U R' U2 R U R' U R U2 R U' R' U' R U' U' R' U' R U' R'
(1,8,10,6)(2,5,7,9)     => U R U R' U R U2 R' U R' U' R U' R' U' U' R U' R U' R' U' R U' U' R' U' R U' R'
(1,8,10,6)(2,5)         => U R U R' U R U R' U2 R U' R'
(1,8,10,6)(2,5,9,7)     => U' R U2 R' U' R U' R2 U2 R U R' U R U R U R'
(1,8,10,6)(2,5,4,7)     => U R U R' U2 R U' R' U' R U' R'
(1,8,10,6)(2,5,9)(4,7)  => U R U' R' U' R U' U' R' U' R U' R'
(1,8,10,6)(2,5)(4,7,9)  => R U' R' U R U2 R' U R U R' U R' U2 R U R' U R U' R U2 R' U' R U' R' U'
(1,8,3,10)(2,5,4)(7,9)  => R U R' U R U R' U U2 R U R' U R U2 R' U
(1,8,3,10)(2,5,9,4)     => U R U' R' U R U2 R' U R U R'
(1,8,3,10)(2,5,7,4)     => R U R' U R U2 R' U2 R U' R' U' R U2 R' U'
(1,8,3,10)(2,5,9)(4,7)  => U R' U2 R U R' U R U2 R U' R' U2 R U' R' U' R U' R'
(1,8,3,10)(2,5,4,7)     => U' R U2 R' U' R U' R2 U2 R U R' U R U R U' R' U' R U2 R' U'
(1,8,3,10)(2,5)(4,7,9)  => U' R U2 R' U' R U' R' U' U' R U' R' U' R U R' U'
(1,8,3,10)(2,5,7)(4,9)  => U R U R' U' R U2 R' U' R U' R'
(1,8,3,10)(2,5,4,9)     => U R U R' U' R' U U R U R' U R U R U R' U R U2 R' U
(1,8,3,10)(2,5)(4,9,7)  => U R U R2 U' R U' R' U2 R U'
(1,8,3,10)(2,5,9,7)     => R' U' R U' R' U2 R2 U' R' U2
(1,8,3,10)(2,5,7,9)     => U R U' R' U' U' R U' R' U' R U' R'
(1,8,3,10)(2,5)         => U R U R' U R U2 R' U R U' R' U' R U2 R' U'
(1,8,6,10,3)(2,5,9)     => U' R U R' U R' U' R U' R' U2 R U'
(1,8,6,10,3)(2,5)(7,9)  => R U' R' U2 R' U' R U' R' U2 R U'
(1,8,6,10,3)(2,5,7)     => U R U R' U R U' U' R' U' R U' R' U' R U2 R'
(1,8,6,10,3)(2,5,7,9,4) => R U' R' U R U2 R' U' R U' R'
(1,8,6,10,3)(2,5,9,7,4) => U' R U' R' U' R U' R'
(1,8,6,10,3)(2,5,4)     => U' R U2 R' U' R U' R2 U2 R U R' U R U' R U' R' U' R U2 R'
(1,8,6,10,3)(2,5)(4,7)  => R U R' U R U R' U' R U2 R'
(1,8,6,10,3)(2,5,9,4,7) => U' R U2 R' U' R U' R' U' R' U' R U' R' U' U' R U' U' R U' R' U'
(1,8,6,10,3)(2,5,4,7,9) => R U' R' U R' U U R U R' U R U R U R' U R U2 R' U
(1,8,6,10,3)(2,5,7,4,9) => U R U R' U R U R' U2 R U R' U R' U2 R U R' U R
(1,8,6,10,3)(2,5,4,9,7) => U R' U2 R U R' U R2 U' R' U' R U' R'
(1,8,6,10,3)(2,5)(4,9)  => U' R U2 R' U' R U' R' U' R U R' U R U2 R' U2 R U' R' U'
(1,3,8,6)(2,5,7,4)      => U
(1,3,8,6)(2,5,4)(7,9)   => R' U' R U' R' U2 R U' U2 R U' R' U2 R U' R' U' R U R'
(1,3,8,6)(2,5,9,4)      => R' U' R U' R' U2 R U' R U' R' U2 R U2 R' U'
(1,3,8,6)(2,5,7,9)      => U R U R' U R U2 R' U R' U' R U' R' U2 R U' U' R U' R' U2 R U' U' R'
(1,3,8,6)(2,5,9,7)      => U R U' R' U R U R' U U R U R' U R U2 R' U' R U' R' U'
(1,3,8,6)(2,5)          => U R U R' U R U2 R' U R' U' R U' R' U2 R U'
(1,3,8,6)(2,5,7)(4,9)   => U R U2 R' U2 R U R' U' R U2 R' U' R U' R' U R U R' U R U2 R' U
(1,3,8,6)(2,5)(4,9,7)   => U R U2 R' U2 R U R' U
(1,3,8,6)(2,5,4,9)      => U R' U2 R U R' U R U R U' R' U2 R U2 R'
(1,3,8,6)(2,5,4,7)      => U R' U2 R U R' U R U2
(1,3,8,6)(2,5,9)(4,7)   => R U' R' U2 R U2 R'
(1,3,8,6)(2,5)(4,7,9)   => R U' R' U R U R' U2 R U R' U'
(1,3,6,10)(2,5,9,4)     => U' R U R' U
(1,3,6,10)(2,5,4)(7,9)  => R U' R' U2
(1,3,6,10)(2,5,7,4)     => U' R U2 R' U' R U' R' U R U' R' U' R U2 R' U'
(1,3,6,10)(2,5,9,7)     => U R' U2 R U R' U R U R U' R' U2
(1,3,6,10)(2,5,7,9)     => R U' R' U R' U' R U' R' U2 R U2 R U2 R' U' R U' R' U'
(1,3,6,10)(2,5)         => U' R U2 R' U' R U' R' U' R U R' U R U R' U' R U2 R' U'
(1,3,6,10)(2,5,9)(4,7)  => R' U' R U' R' U2 R U' U2 R U' R' U2 R U' R' U' R U' R'
(1,3,6,10)(2,5)(4,7,9)  => R U R' U' R U' R' U R U R' U R U2 R' U
(1,3,6,10)(2,5,4,7)     => R U R' U2 R U R' U'
(1,3,6,10)(2,5,7)(4,9)  => U R U R' U R U2 R' U2 R U' R' U' R U R' U'
(1,3,6,10)(2,5,4,9)     => U R U R' U R U R' U U R U R' U R U2 R' U' R U' R' U'
(1,3,6,10)(2,5)(4,9,7)  => U R U R' U R U2 R' U R' U' R U' R' U2 R U2 R U' R' U2
(1,3,10,6,8)(2,5,7,9,4) => U R U R' U R U2 R' U2 R U' R' U' U' R U' R' U' R U' R' U'
(1,3,10,6,8)(2,5,4)     => R U2 R' U R U R' U R' U' R U' R' U2 R U'
(1,3,10,6,8)(2,5,9,7,4) => U R U' R' U R U2 R' U R U2 R' U R U2 R' U
(1,3,10,6,8)(2,5,9)     => U R U' R' U R U2 R' U R U R' U R' U2 R U R' U R
(1,3,10,6,8)(2,5)(7,9)  => U R' U2 R U R' U R U2 R U R'
(1,3,10,6,8)(2,5,7)     => R U' R' U2 R U' R'
(1,3,10,6,8)(2,5,7,4,9) => U R U R' U' R' U' R U' R' U2 R U2 R U2 R' U' R U' R' U'
(1,3,10,6,8)(2,5)(4,9)  => U R U R' U2 R U2 R' U' R U' R' U R U R' U R U2 R' U
(1,3,10,6,8)(2,5,4,9,7) => U R U R'
(1,3,10,6,8)(2,5,4,7,9) => R U R' U R U' R' U' R U' R' U'
(1,3,10,6,8)(2,5,9,4,7) => R U R' U R U2 R' U' R U' R' U' U' R U' R' U' R U' R' U'
(1,3,10,6,8)(2,5)(4,7)  => R U2 R' U R U' R' U' R U' R'
(1,3)(2,5,9)(8,10)      => U R U' R'
(1,3)(2,5,7)(8,10)      => U R U R' U U R U R' U
(1,3)(2,5)(7,9)(8,10)   => U' R U2 R' U' R U' R' U' R' U' R U' R' U' U' R2 U' R' U' R U2 R' U' R U R'
(1,3)(2,5,7,9,4)(8,10)  => R U' R' U R U2 R' U R U R' U R' U' R U' R' U2 R U'
(1,3)(2,5,9,7,4)(8,10)  => U R U' R' U2 R U2 R' U' R U' R' U R U R' U R U2 R' U
(1,3)(2,5,4)(8,10)      => U R U R' U R U2 R' U R U R' U R U2 R' U R U' R' U2 R U' R' U'
(1,3)(2,5)(4,7)(8,10)   => U R U R' U R U2 R' U2 R' U2 R U R' U R2 U' R' U2 R U' R' U'
(1,3)(2,5,9,4,7)(8,10)  => U R U' R' U' R' U' R U' R' U2 R U2 R U2 R' U' R U' R' U'
(1,3)(2,5,4,7,9)(8,10)  => R U' R' U R U2 R' U R U2 U R' U' R U' R'
(1,3)(2,5,7,4,9)(8,10)  => U R' U2 R U R' U R U2 R U' R'
(1,3)(2,5)(4,9)(8,10)   => U' R U2 R' U' R U2 R' U' R U2 R' U' R U' R' U'
(1,3)(2,5,4,9,7)(8,10)  => U R U R' U R U U R' U R U R' U R' U U R U R' U R
(1,3,8,6)(2,7,4)(5,9)   => U' R U2 R' U' R U' R' U' R U' R' U' U' R U' R' U' R U R' U'
(1,3,8,6)(2,7,9,4)      => R U R' U R U2 R' U' R U' R' U2 R U2 R' U'
(1,3,8,6)(2,7,5,4)      => R U R' U R U2 R' U'
(1,3,8,6)(2,7)(4,5,9)   => U' R U2 R' U' R U' R2 U2 R U R' U R U2 R U' R' U2 R U2 R' U'
(1,3,8,6)(2,7,4,5)      => U R U R' U R U2 R' U2
(1,3,8,6)(2,7,9)(4,5)   => U' R U2 R' U' R U' R' U' R' U' R U' R' U2 R U' U' R U' R' U2 R U' U' R'
(1,3,8,6)(2,7,5,9)      => U' R U2 R' U' R U' R' U' R U R' U R U' U' R' U2 R U' R' U2 R U2 R'
(1,3,8,6)(2,7,9,5)      => R U' R' U R U R' U2 R U R' U R' U2 R U R' U R U' R U2 R' U' R U' R' U'
(1,3,8,6)(2,7)          => U' R U2 R' U' R U' R2 U2 R U R' U R U2
(1,3,8,6)(2,7)(4,9,5)   => U R U2 R' U2 R U R' U U2 R' U2 R U R' U R U R U R' U R U2 R' U
(1,3,8,6)(2,7,4,9)      => U' R U2 R' U' R U' R' U' R U' R' U2 R U2 R'
(1,3,8,6)(2,7,5)(4,9)   => U R U R' U R U2 R' U2 R U' R' U2 R U2 R' U'
(1,3,6,10)(2,7,5,4)     => R U R' U2 R U R' U R' U2 R U R' U R
(1,3,6,10)(2,7,9,4)     => R U' R2 U2 R U R' U R U' R U2 R' U' R U' R' U'
(1,3,6,10)(2,7,4)(5,9)  => U R U R' U R U2 R' U2 R' U2 R U R' U R R U' R' U' R U' R' U'
(1,3,6,10)(2,7,4,9)     => U R U R' U R U R' U U R U R' U R' U' R U' R' U2 R2 U R' U R U2 R' U
(1,3,6,10)(2,7)(4,9,5)  => U R U R' U R U2 R' U R U R' U R U2 R' U R U' R' U' R U' R' U'
(1,3,6,10)(2,7,5)(4,9)  => U R U R' U R U R' U U R U R' U R' U' R U' R' U2 R U'
(1,3,6,10)(2,7)(4,5,9)  => U' R U2 R' U' R U2 R' U' R U2 U' R' U'
(1,3,6,10)(2,7,9)(4,5)  => R U' R2 U2 R U R' U R
(1,3,6,10)(2,7,4,5)     => U2 R U' R' U' R U2 R' U'
(1,3,6,10)(2,7)         => U R U R' U R U2 R' U R' U' R U' R' U2 R2 U' R' U' R U2 R' U'
(1,3,6,10)(2,7,5,9)     => U' R U2 R' U' R U' R' U' U' R U' R' U' U' R U' R' U' R U' R'
(1,3,6,10)(2,7,9,5)     => R' U' R U' R' U2 R U' U2 R U' R' U' R U' R' U'
(1,3,10,6,8)(2,7,5,9,4) => U' R U2 R' U' R U' R' U' R' U' R U' R' U2 R U' R U' R' U2 R U' R' U' R U' R' U'
(1,3,10,6,8)(2,7,9,5,4) => U' R U2 R' U' R U' R' U' R U R' U R U R' U
(1,3,10,6,8)(2,7,4)     => R U2 R' U R U R' U2
(1,3,10,6,8)(2,7)(5,9)  => U' R U2 R' U' R U' R' U2 U' R U' R' U2 U'
(1,3,10,6,8)(2,7,5)     => R U R' U R U' U' R' U2 R U' R' U2 R U' R'
(1,3,10,6,8)(2,7,9)     => R U R' U R U R2 U' R U' R' U2 R2 U R' U R U2 R' U
(1,3,10,6,8)(2,7,4,5,9) => R' U' R U' R' U2 R2 U' R' U' R U' U' R' U' R U' R'
(1,3,10,6,8)(2,7,9,4,5) => R U R' U R U R2 U' R U' R' U2 R U'
(1,3,10,6,8)(2,7)(4,5)  => U R U R' U R U2 R' U R U' R' U2 R U' R'
(1,3,10,6,8)(2,7,5,4,9) => U R U R' U U R' U U R U R' U R
(1,3,10,6,8)(2,7)(4,9)  => U R U R' U U R' U U R U R' U R U' R U2 R' U' R U' R' U'
(1,3,10,6,8)(2,7,4,9,5) => U' R U2 R' U' R U' R' U' R' U' R U' R' U' U' R2 U' R' U
(1,3)(2,7)(4,5)(8,10)   => U R U R' U R U2 R' U R' U' R U' R' U2 R U' U2 R U' R' U2 R U' R' U'
(1,3)(2,7,9,4,5)(8,10)  => R' U' R U' R' U' U' R U' R U' R' U' R U' U' R' U' R U' R' U'
(1,3)(2,7,4,5,9)(8,10)  => U R U R' U R U2 R' U2 R' U2 R U R' U R U2 R U' R'
(1,3)(2,7,5,4,9)(8,10)  => U R U R' U R U2 R' U R U R' U R U2 R' U' R U' R'
(1,3)(2,7)(4,9)(8,10)   => U R U R' U R U2 R' U R U R' U R U2 R' U' R U' R' U' R U' U' R' U' R U' R' U'
(1,3)(2,7,4,9,5)(8,10)  => U R U R' U R U2 R' U2 R' U2 R U R' U R U R U R' U'
(1,3)(2,7,9,5,4)(8,10)  => R U' R' U R U2 R' U R U R' U2
(1,3)(2,7,4)(8,10)      => U R' U2 R U R' U R2 U' R' U2 R U' R' U'
(1,3)(2,7,5,9,4)(8,10)  => U R U' R' U2 R' U U R U R' U R U R U R' U R U2 R' U
(1,3)(2,7)(5,9)(8,10)   => R' U' R U' R' U2 R U2 R U R' U'
(1,3)(2,7,9)(8,10)      => R' U' R U' R' U' U' R U' R U' R'
(1,3)(2,7,5)(8,10)      => U' R U' R' U' U' R U' R' U'
(1,3,6,10)(2,9,4)(5,7)  => R U R' U R U U R' U R U R' U
(1,3,6,10)(2,9,7,4)     => R' U' R U' R' U2 R U2 R U' R' U2
(1,3,6,10)(2,9,5,4)     => U R U R' U R U R' U' R U' R' U'
(1,3,6,10)(2,9)(4,5,7)  => R U R' U R U U R' U R U R' U2 R U R' U R U2 R' U
(1,3,6,10)(2,9,4,5)     => U R' U2 R U R' U R U2 R U' R' U' R U R' U'
(1,3,6,10)(2,9,7)(4,5)  => U R U R' U R U2 R' U2 R' U2 R U R' U R U R U' R' U2
(1,3,6,10)(2,9,5,7)     => R U R' U R U2 R' U R U' R' U' R U' R' U'
(1,3,6,10)(2,9,7,5)     => U R U R' U R U2 R' U R U R' U R U2 R' U2 R U' R' U2
(1,3,6,10)(2,9)         => U R' U2 R U R' U R2 U' R' U' U' R U' R' U' R U' R'
(1,3,6,10)(2,9,4,7)     => U R U' R' U' R U R' U'
(1,3,6,10)(2,9)(4,7,5)  => U' R U' R' U' U' R U' R' U' R U' R'
(1,3,6,10)(2,9,5)(4,7)  => U' R U2 R' U' R U' R2 U2 R U R' U R R U' R' U' R U' R' U'
(1,3,10,6,8)(2,9,7,5,4) => U' R U2 R' U' R U' R' U' R U R' U R U2 R' U' R U R'
(1,3,10,6,8)(2,9,4)     => R U' R' U R U R' U R' U U R U R' U R U R U R' U R U2 R' U
(1,3,10,6,8)(2,9,5,7,4) => R U U2 R' U R U2 R' U R U2 R' U
(1,3,10,6,8)(2,9,5,4,7) => U2 R U' R' U
(1,3,10,6,8)(2,9)(4,7)  => R U' R' U R U R' U2 R' U' R U' R' U2 R U'
(1,3,10,6,8)(2,9,4,7,5) => R' U' R U' R' U2 R U' R U' R' U2 R U' R' U' R U' R' U'
(1,3,10,6,8)(2,9)(4,5)  => U2 R U' R' U' R U' U' R' U' R U' R'
(1,3,10,6,8)(2,9,4,5,7) => R U' R' U R U R' U2 R U2 R' U' R U' R' U'
(1,3,10,6,8)(2,9,7,4,5) => U' R U2 R' U' R U' R' U' R' U' R U' R' U' U' R U' R U R'
(1,3,10,6,8)(2,9)(5,7)  => R U' R' U R U R' U'
(1,3,10,6,8)(2,9,7)     => U' R U2 R' U'
(1,3,10,6,8)(2,9,5)     => U R' U2 R U R' U R U' R U' R' U
(1,3,8,6)(2,9,7,4)      => R U2 R' U2 R U R' U R' U' R U' R' U2 R U'
(1,3,8,6)(2,9,5,4)      => U R' U2 R U R' U R U R U' R' U2 R U' R' U' R U R' U'
(1,3,8,6)(2,9,4)(5,7)   => U R U' R' U2 R U2 R' U'
(1,3,8,6)(2,9)(4,7,5)   => R U R' U R U' U' R' U2 R U' R' U2 R U2 R'
(1,3,8,6)(2,9,4,7)      => R U2 R' U2 R U' R' U' R U' R'
(1,3,8,6)(2,9,5)(4,7)   => R U' R' U2 R U' R' U' R U R' U'
(1,3,8,6)(2,9,5,7)      => R U2 R' U2 R U R' U R U2 R' U' R U' R' U'
(1,3,8,6)(2,9)          => U' R U2 R' U' R U' R2 U2 R U R' U R U R U' R' U2 R U2 R'
(1,3,8,6)(2,9,7,5)      => U R U R' U R U R' U2 R U' R' U' R U R'
(1,3,8,6)(2,9,7)(4,5)   => R U2 R' U2 R U R' U R' U' R U' R' U2 R2 U R' U R U2 R' U
(1,3,8,6)(2,9)(4,5,7)   => U R U R' U R U2 R' U R U' R' U2 R U2 R'
(1,3,8,6)(2,9,4,5)      => R U2 R' U2 R U R' R' U2 R U R' U R
(1,3)(2,9)(4,5)(8,10)   => U R U R' U R U2 R' U2 R U' R'
(1,3)(2,9,7,4,5)(8,10)  => R U R' U R U' U2 R' U' R U2 R' U' R U R'
(1,3)(2,9,4,5,7)(8,10)  => R U R' U R U2 R' U' R U' R' U' R U2 R' U' R U' R' U'
(1,3)(2,9,5,7,4)(8,10)  => U R' U2 R U R' U R U R U R' U'
(1,3)(2,9,7,5,4)(8,10)  => R U R' U R' U U R U R' U R U R U R' U R U2 R' U
(1,3)(2,9,4)(8,10)      => R U2 R' U R U2 R' U
(1,3)(2,9,4,7,5)(8,10)  => R U R' U2 R' U' R U' R' U2 R U'
(1,3)(2,9,5,4,7)(8,10)  => U R U R' U R U2 R' U R' U' R U' R' U2 R U2 R U R' U'
(1,3)(2,9)(4,7)(8,10)   => U' R U2 R' U' R U' R2 U2 R U R' U R U2 R U' R'
(1,3)(2,9)(5,7)(8,10)   => R U R' U R U2 R' U' R U' R'
(1,3)(2,9,7)(8,10)      => R U R' U R' U2 R U R' U R
(1,3)(2,9,5)(8,10)      => R U R' U'
(1,3,6,10)(2,4)(5,9,7)  => R U R' U R U2 R' U2 R U' R' U2
(1,3,6,10)(2,4)         => U R U R' U R U2 R' U R U R' U R U R' U' R U2 R' U'
(1,3,6,10)(2,4)(5,7,9)  => R U' R' U R' U' R U' R' U2 R U'
(1,3,6,10)(2,4,5,7)     => R' U' R U' R' U2 R2 U' R' U' R U2 R' U'
(1,3,6,10)(2,4,5)(7,9)  => U R U R' U R U2 R' U R U' R' U2
(1,3,6,10)(2,4,5,9)     => U U2 R U R' U2 R U R' U R U2 R' U
(1,3,6,10)(2,4,7)(5,9)  => U' R U R' U' R U2 R' U' R U' R' U' R U2 R' U' R U' R' U'
(1,3,6,10)(2,4,7,5)     => R U R' U2 R U2 R' U R U2 R' U
(1,3,6,10)(2,4,7,9)     => R U R' U' R U' R' U' R U2 R' U' R U' R' U'
(1,3,6,10)(2,4,9,7)     => U R U R' U R U R' U2 R U R' R' U2 R U R' U R
(1,3,6,10)(2,4,9)(5,7)  => U R U R' U R U R' U' U' R U' R' U' R U' R'
(1,3,6,10)(2,4,9,5)     => U R U R' U R U R' U U R U R' U U
(1,3,10,6,8)(2,4)(5,7)  => R U2 R' U R U R2 U2 R U R' U R U' R U2 R' U' R U' R' U'
(1,3,10,6,8)(2,4)(7,9)  => R U R' U R U R' U U2 R' U2 R U R' U R
(1,3,10,6,8)(2,4)(5,9)  => U' R U2 R' U' R U' R2 U2 R U R' U R U' R U' R' U
(1,3,10,6,8)(2,4,5,9,7) => U R U R' U R U2 R' U2 R U R'
(1,3,10,6,8)(2,4,5)     => R U2 R' U R U R' U R' U' R U' R' U2 R2 U R' U R U2 R' U
(1,3,10,6,8)(2,4,5,7,9) => R U R' U R U R' U' R U2 R' U' R U' R'
(1,3,10,6,8)(2,4,9,5,7) => U R U R' U' R' U' R U' R' U2 R U'
(1,3,10,6,8)(2,4,9,7,5) => R U R' U R U2 R' U' R U R'
(1,3,10,6,8)(2,4,9)     => U R U R' U R U2 R' U' R U' R' U' R U' U' R' U' R U' R'
(1,3,10,6,8)(2,4,7,5,9) => U' R U2 R' U' R U' R2 U2 R U R' U R U' R U' R' U' R U' U' R' U' R U' R'
(1,3,10,6,8)(2,4,7)     => U' R U2 R' U' R U' R' U' R U' R' U2 R U' R'
(1,3,10,6,8)(2,4,7,9,5) => R U R' U R U R' U
(1,3,8,6)(2,4)(5,7,9)   => R U' R' U R U R' U U R U R' U R U2 R' U' R U' R' U' R U2 R' U' R U' R' U'
(1,3,8,6)(2,4)          => R' U' R U' R' U2 R U'
(1,3,8,6)(2,4)(5,9,7)   => U' R U' R' U' U' R U' R' U' R U R'
(1,3,8,6)(2,4,5,7)      => U2 R U R' U R U2 R' U
(1,3,8,6)(2,4,5,9)      => U R U' R' U R U R' U2 R U R' R' U2 R U R' U R
(1,3,8,6)(2,4,5)(7,9)   => R U' R' U R U R' U U R U R' U U R' U' R U' R' U2 R U'
(1,3,8,6)(2,4,9)(5,7)   => U R U R' U R U2 R' U R U R' U R U2 R' U2 R U' R' U2 R U2 R'
(1,3,8,6)(2,4,9,5)      => U R U2 R' U2 R U R2 U' R U' R' U2 R U'
(1,3,8,6)(2,4,9,7)      => U R' U2 R U R' U R2 U' R' U2 R U' R' U' R U R'
(1,3,8,6)(2,4,7)(5,9)   => U R U' R' U R U R' U2 R U' R' U' R U' R'
(1,3,8,6)(2,4,7,9)      => R' U' R U' R' U2 R U' U' R U' R' U2 R U' U' R'
(1,3,8,6)(2,4,7,5)      => U R U R' U R U2 R' U R U R' U R U2 R' U'
(1,3)(2,4,5,7,9)(8,10)  => U' R U2 R' U' R U' R' U' R' U' R U' R' U' U' R U' R U' R'
(1,3)(2,4,5,9,7)(8,10)  => U2 R U' R' U' R U2 R' U' R U R'
(1,3)(2,4,5)(8,10)      => U' R U2 R' U' R U' R' U' R U R' U R U2 R' U R U' R' U2 R U' R' U'
(1,3)(2,4,7,9,5)(8,10)  => U' R U2 R' U' R U' R' U' R U R' U R U2 R' U2 R U R' U'
(1,3)(2,4,7,5,9)(8,10)  => U R U' R' U' R' U' R U' R' U2 R U'
(1,3)(2,4,7)(8,10)      => U R U R' U2 R U R2 U' R U' R' U2 R U'
(1,3)(2,4,9)(8,10)      => U' R U2 R' U' R U2 R'
(1,3)(2,4,9,5,7)(8,10)  => U' R U2 R' U' R U' R' U' R' U' R U' R' U' U' R U2 R U R' U'
(1,3)(2,4,9,7,5)(8,10)  => U R' U2 R U R' U R U' R U' R' U' R U2 R' U' R U R'
(1,3)(2,4)(7,9)(8,10)   => U R U R' U R U2 R' U R' U' R U' R' U2 R2 U' R' U' R U2 R' U' R U R'
(1,3)(2,4)(5,7)(8,10)   => U' R U2 R' U' R U' R' U' U' R U' R' U' U' R U' R' U'
(1,3)(2,4)(5,9)(8,10)   => U' R U2 R' U' R U' R' U' R U R' U'
(1,3,8,6)(7,9)          => R U' R' U R U R' U U R U R' U U R' U' R U' R' U2 R2 U R' U R U2 R' U
(1,3,8,6)(5,7)          => R U2 R' U' R U' R' U'
(1,3,8,6)(5,9)          => U' R U2 R' U' R U' R2 U2 R U R' U R U R U' R' U2 R U' R' U' R U R' U'
(1,3,8,6)(4,7)          => U' R U2 R' U' R U' R'
(1,3,8,6)(4,7,9,5)      => R U R' U R U' U' R' U2 R U' R' U2 R U' R' U' R U R' U'
(1,3,8,6)(4,7,5,9)      => U' R U2 R' U' R U2 R' U' U' R U2 R' U'
(1,3,8,6)(4,9)          => U R U2 R' U2 R U R2 U' R U' R' U2 R2 U R' U R U2 R' U
(1,3,8,6)(4,9,7,5)      => U R U2 R' U2 R U' R' U' R U' R' U'
(1,3,8,6)(4,9,5,7)      => U R U2 R' U2 R U R' U' R U2 R' U' R U' R'
(1,3,8,6)(4,5,7,9)      => R U' R' U R U R' U U R U R' U R U2 R' U' R U' R'
(1,3,8,6)(4,5,9,7)      => U R U' R' U R U R' U2 R U R' U U2 R U R' U R U2 R' U
(1,3,8,6)(4,5)          => R' U' R U' R' U2 R2 U R' U R U2 R' U
(1,3)(8,10)             => R U R' U R U2 R' U R U' R' U2 R U' R' U'
(1,3)(5,9,7)(8,10)      => U R U' R' U2 R U2 R' U' R U' R'
(1,3)(5,7,9)(8,10)      => R U R' U R U2 R' U2 R U R' U'
(1,3)(4,9,7)(8,10)      => U R U R' U R U2 R' U R U R' U R U' U2 R' U' R U2 R' U' R U R'
(1,3)(4,9,5)(8,10)      => U R U R' U R U2 R' U R U R' U'
(1,3)(4,9)(5,7)(8,10)   => U R' U2 R U R' U R U2 R U' R' U' R U' U' R' U' R U' R' U'
(1,3)(4,7,9)(8,10)      => R U' R' U R U2 R' U R U2 U R' U' R U' R' U' R U2 R' U' R U' R' U'
(1,3)(4,7,5)(8,10)      => U R U R' U R U R' U2 R U' R' U'
(1,3)(4,7)(5,9)(8,10)   => U' R U2 R' U' R U' R2 U2 R U R' U R U R U R' U'
(1,3)(4,5,7)(8,10)      => U R U R' U2 R U' R' U' R U' R' U'
(1,3)(4,5,9)(8,10)      => U R U' R' U' R U' U' R' U' R U' R' U'
(1,3)(4,5)(7,9)(8,10)   => R' U' R U' R' U2 R2 U' R' U' R U2 R' U' R U R'
(1,3,10,6,8)(5,7,9)     => U R U R' U R U2 R' U R U R' U R U R' U
(1,3,10,6,8)(5,9,7)     => U R U' R' U R U2 R' U R U R' U'
(1,3,10,6,8)            => R' U' R U' R' U2 R U' U' R U' R' U2 R U' R'
(1,3,10,6,8)(4,5,9)     => U R' U2 R U R' U R U2 R U' R' U2 R U' R' U' R U' R' U'
(1,3,10,6,8)(4,5,7)     => R U2 R' U R U R2 U2 R U R' U R
(1,3,10,6,8)(4,5)(7,9)  => U R U R' U R U2 R' U2 R' U2 R U R' U R U2 R U R'
(1,3,10,6,8)(4,9,7)     => R' U' R U' R' U' U' R U' R U R'
(1,3,10,6,8)(4,9)(5,7)  => U R U R' U' R' U' R U' R' U2 R2 U R' U R U2 R' U
(1,3,10,6,8)(4,9,5)     => U R U R' U2 R U2 R' U' R U' R'
(1,3,10,6,8)(4,7)(5,9)  => R' U' R U' R' U2 R2 U' R' U
(1,3,10,6,8)(4,7,9)     => U R U' R' U' U' R U' R' U' R U' R' U'
(1,3,10,6,8)(4,7,5)     => R U2 R' U R U' R' U' R U' R' U' R U2 R' U' R U' R' U'
(1,3,6,10)(4,7,5,9)     => U' R U R' U' R U2 R' U' R U' R'
(1,3,6,10)(4,7,9,5)     => R U R' U' R U' R'
(1,3,6,10)(4,7)         => U R U R' U R U' U' R' U' R U' R' U' R U2 R' U'
(1,3,6,10)(7,9)         => R U' R' U R U2 R' U' R U' R' U'
(1,3,6,10)(5,9)         => U' R U' R' U' R U' R' U'
(1,3,6,10)(5,7)         => U' R U2 R' U' R U' R2 U2 R U R' U R U' R U' R' U' R U2 R' U'
(1,3,6,10)(4,5)         => R U R' U R U R' U' R U2 R' U'
(1,3,6,10)(4,5,9,7)     => U' R U R2 U' R U' R' U2 R2 U R' U R U2 R' U
(1,3,6,10)(4,5,7,9)     => R U' R' U R' U' R U' R' U2 R2 U R' U R U2 R' U
(1,3,6,10)(4,9)         => U R U R' U R U R' U2 R U R' U U2 R U R' U R U2 R' U
(1,3,6,10)(4,9,5,7)     => U R' U2 R U R' U R R U' R' U' R U' R' U'
(1,3,6,10)(4,9,7,5)     => U' R U2 R' U' R U' R' U' R U R' U R U2 R' U2 R U' R' U2
(1,10,8,3,6)(2,7,5,4,9) => U' R U' R'
(1,10,8,3,6)(2,7,4,9,5) => U R U R' U R U2 R' U R' U' R U' R' U2 R2 U R' U'
(1,10,8,3,6)(2,7)(4,9)  => U' R U' R' U' R U' U' R' U' R U' R' U'
(1,10,8,3,6)(2,7,9,5,4) => U2 R U R' U'
(1,10,8,3,6)(2,7,4)     => R' U' R U' R' U2 R U' R U' R' U2 R U' R' U'
(1,10,8,3,6)(2,7,5,9,4) => U R U R' U R U R' U' R' U' R U' R' U2 R U2 R U2 R' U' R U' R' U'
(1,10,8,3,6)(2,7)(4,5)  => U R U2 R' U R U R' U' R U2 R' U' R U' R' U R U R' U R U2 R' U
(1,10,8,3,6)(2,7,4,5,9) => U R U R' U R U R' U' R' U' R U' R' U2 R U'
(1,10,8,3,6)(2,7,9,4,5) => U2 R U2 R' U R U2 R' U
(1,10,8,3,6)(2,7,9)     => U R' U2 R U R' U R2 U' R'
(1,10,8,3,6)(2,7,5)     => U R U R' U R U2 R' U R U R' U R U2 R' U' R U' R' U2 R U' R' U'
(1,10,8,3,6)(2,7)(5,9)  => U R' U2 R U R' U R U' R U R' U'
(1,10,6,3)(2,7,4,9)     => U R U' R' U R U R' U'
(1,10,6,3)(2,7,5)(4,9)  => U R U' R' U R U R' U2 R U2 R' U' R U' R' U'
(1,10,6,3)(2,7)(4,9,5)  => R' U' R U' R' U2 R U' U2 R U' R' U
(1,10,6,3)(2,7,5,4)     => U R U2 R' U R U R2 U2 R U R' U R
(1,10,6,3)(2,7,4)(5,9)  => U R U R' U R U2 R' U R U R' U R U2 R' U R U' R' U
(1,10,6,3)(2,7,9,4)     => R' U' R U' R' U2 R R U' R' U2 R U' R' U' R U' R' U'
(1,10,6,3)(2,7)         => U R U R' U R U2 R' U R' U' R U' R' U2 R U' R U' R' U2 R U' R'
(1,10,6,3)(2,7,5,9)     => U R U R' U R U R' U' R U2 R' U' R U' R'
(1,10,6,3)(2,7,9,5)     => U2 R U R' U' R' U' R U' R' U2 R U'
(1,10,6,3)(2,7,4,5)     => U R U' R' U2 R U' R'
(1,10,6,3)(2,7,9)(4,5)  => U2 R U R' U' R' U' R U' R' U2 R U2 R U2 R' U' R U' R' U'
(1,10,6,3)(2,7)(4,5,9)  => U R U R' U R U R' U' R U2 R' U' R U' R' U' R U2 R' U' R U' R' U'
(1,10)(2,7)(4,9)(6,8)   => U R' U2 R U R' U R U R U' R' U' R U R' U'
(1,10)(2,7,4,9,5)(6,8)  => U' R U2 R' U' R U' R' U' R U R' U R U R' U' R U' R' U'
(1,10)(2,7,5,4,9)(6,8)  => U R' U2 R U R' U R U' R U' R' U' U' R U' R' U' R U' R'
(1,10)(2,7,4)(6,8)      => U R U2 R' U R U2 R' U R U2 R' U
(1,10)(2,7,9,5,4)(6,8)  => U' R U2 R' U' R U' R' U2 U' R U' R' U' R U' R' U'
(1,10)(2,7,5,9,4)(6,8)  => R U' R' U' R U R' U'
(1,10)(2,7,9)(6,8)      => U2 R U R' U' R U2 R' U' R U' R' U R U R' U R U2 R' U
(1,10)(2,7)(5,9)(6,8)   => U' R U2 R' U' R U' R' U' R' U' R U' R' U' U' R R U' R' U' R U' R' U'
(1,10)(2,7,5)(6,8)      => U R U2 R' U R U R' U'
(1,10)(2,7,9,4,5)(6,8)  => U2 R U R' U' R U2 R' U' R U' R'
(1,10)(2,7)(4,5)(6,8)   => U R U R' U R U2 R' U2 R U' R' U' R U2 R' U'
(1,10)(2,7,4,5,9)(6,8)  => U2 R U' R' U2 R U' R' U' R U' R'
(1,10,3,8)(2,7,5,4)     => U R U' R' U' R U2 R'
(1,10,3,8)(2,7,9,4)     => U' R U2 R' U' R U' R2 U2 R U R' U R2 U' R' U'
(1,10,3,8)(2,7,4)(5,9)  => U R U R' U R U R' U2 R U2 R' U' R U' R' U'
(1,10,3,8)(2,7)(4,5,9)  => U R U R' U R U R' U'
(1,10,3,8)(2,7,4,5)     => U R U R' U R U2 R' U R' U' R U' R' U' U' R U' R U' R' U' R U2 R'
(1,10,3,8)(2,7,9)(4,5)  => R' U' R U' R' U2 R U2 R U' R' U' R U R'
(1,10,3,8)(2,7)(4,9,5)  => U R U' R' U R U R' U' R U2 R' U' R U' R'
(1,10,3,8)(2,7,5)(4,9)  => R U R' U R U2 R' U R U' R' U'
(1,10,3,8)(2,7,4,9)     => U R U R' U R U2 R' U R U R' U R U2 R' U2 R U' R' U' R U R'
(1,10,3,8)(2,7,5,9)     => U R U R' U R U2 R' U R U2 R' U
(1,10,3,8)(2,7)         => U R' U2 R U R' U R U2 R U' R' U' R U2 R'
(1,10,3,8)(2,7,9,5)     => U2 R U R2 U2 R U R' U R
(1,10,8,3,6)(2,4,9)     => R U R' U R U2 R' U R U' R'
(1,10,8,3,6)(2,4,9,5,7) => U' R U2 R' U' R U' R2 U2 R U R' U R U' R U R' U'
(1,10,8,3,6)(2,4,9,7,5) => U R U' R' U R U R' U R' U' R U' R' U2 R U'
(1,10,8,3,6)(2,4,7)     => U' R U2 R' U' R U' R2 U2 R U R' U R U2 R U' R' U2 R U' R' U'
(1,10,8,3,6)(2,4,7,5,9) => U R U R' U R U R'
(1,10,8,3,6)(2,4,7,9,5) => U R U R' U R U2 R' U' R U R' U'
(1,10,8,3,6)(2,4)(7,9)  => U2 R U R' U R' U2 R U R' U R U' R U2 R' U' R U' R' U'
(1,10,8,3,6)(2,4)(5,9)  => R U R' U R U' R' U'
(1,10,8,3,6)(2,4)(5,7)  => U R U2 R' U R U' R' U' R U' R' U'
(1,10,8,3,6)(2,4,5,7,9) => U' R U2 R' U' R U' R2 U2 R U R' U R2 U' R'
(1,10,8,3,6)(2,4,5)     => U R U R' U R U2 R' U2 R U' R' U2 R U' R' U'
(1,10,8,3,6)(2,4,5,9,7) => U R U R' U R U R' U2 R U2 R' U' R U' R'
(1,10,6,3)(2,4,9,5)     => U' R U' R' U
(1,10,6,3)(2,4,9)(5,7)  => U' R U' R' U' R U' U' R' U' R U' R'
(1,10,6,3)(2,4,9,7)     => U R U R' U R U2 R' U R' U' R U' R' U2 R2 U R'
(1,10,6,3)(2,4,5)(7,9)  => U2 R U R'
(1,10,6,3)(2,4,5,7)     => R' U' R U' R' U2 R U' R U' R' U2 R U' R'
(1,10,6,3)(2,4,5,9)     => U R U R' U R U' R' U' R U' R' U'
(1,10,6,3)(2,4,7,5)     => U R U2 R' U R U R' U' R U R' U R U2 R' U
(1,10,6,3)(2,4,7,9)     => U2 R U R' U U R' U U R U R' U R
(1,10,6,3)(2,4,7)(5,9)  => U R U R' U R U2 R' U R' U' R U' R' U2 R U' U2 R U' R' U
(1,10,6,3)(2,4)         => U R U2 R' U R U' R' U' R U' R' U' R U2 R' U' R U' R' U'
(1,10,6,3)(2,4)(5,7,9)  => U R' U2 R U R' U R2 U' R' U
(1,10,6,3)(2,4)(5,9,7)  => U R' U2 R U R' U R U' R U R'
(1,10)(2,4,9,5,7)(6,8)  => U R U' R' U R U R'
(1,10)(2,4,9,7,5)(6,8)  => R' U' R U' R' U2 R U' U2 R U' R' U2
(1,10)(2,4,9)(6,8)      => U R U' R' U R U R' U2 R U2 R' U' R U' R'
(1,10)(2,4,5)(6,8)      => U' R U2 R' U' R U' R' U' R' U' R U' R' U' U' R U' R U' R' U' R U2 R' U'
(1,10)(2,4,5,7,9)(6,8)  => R' U' R U' R' U2 R R U' R' U2 R U' R' U' R U' R'
(1,10)(2,4,5,9,7)(6,8)  => U R U R' U R U R' U' R U R' U R U2 R' U
(1,10)(2,4)(6,8)(7,9)   => U R U R' U R U2 R' U2 R' U2 R U R' U R2 U' R' U2
(1,10)(2,4)(5,7)(6,8)   => U' R U2 R' U' R U' R' U' R U R' U R U' U' R' U' R U' R' U' R U2 R' U'
(1,10)(2,4)(5,9)(6,8)   => U R' U2 R U R' U R U' R U' R' U' R U' R' U'
(1,10)(2,4,7,9,5)(6,8)  => U' U' R U' R' U' R U' R' U'
(1,10)(2,4,7)(6,8)      => U' R U2 R' U' R U2 R' U' R U2 R' U'
(1,10)(2,4,7,5,9)(6,8)  => U R U R' U R U' R' U' R U' R' U' R U2 R' U' R U' R' U'
(1,10,3,8)(2,4,7,5)     => U R U R' U R U2 R' U2 R U' R' U' R U2 R'
(1,10,3,8)(2,4,7)(5,9)  => U R U R' U R U R' U R' U2 R U R' U R U' R U2 R' U' R U' R' U'
(1,10,3,8)(2,4,7,9)     => U2 R U R' U R' U' R U' R' U2 R U'
(1,10,3,8)(2,4,9,7)     => U R U' R' U R U' R' U' R U' R' U'
(1,10,3,8)(2,4,9,5)     => R U' R' U' R U2 R' U' R U R' U'
(1,10,3,8)(2,4,9)(5,7)  => U R' U2 R U R' U R U R U' R' U' R U R'
(1,10,3,8)(2,4,5,9)     => R U' R' U' R U R'
(1,10,3,8)(2,4,5)(7,9)  => U' R U2 R' U' R U' R' U2 U' R U' R' U' R U' R'
(1,10,3,8)(2,4,5,7)     => U R U2 R' U R U R' U U R' U U R U R' U R
(1,10,3,8)(2,4)         => U R U2 R' U R U R'
(1,10,3,8)(2,4)(5,7,9)  => U2 R U R' U U2 R U R' U R U2 R' U
(1,10,3,8)(2,4)(5,9,7)  => U' R U2 R' U' R U' R' U' R' U' R U' R' U' U' R2 U' R' U' R U' R'
(1,10,8,3,6)(2,5,7,4,9) => R' U' R U' R' U2 R U' U2 R U' R'
(1,10,8,3,6)(2,5)(4,9)  => U R U' R' U R U R' U2
(1,10,8,3,6)(2,5,4,9,7) => R U R' U R U2 R' U2 R U' R' U' R U2 R' U' R U R'
(1,10,8,3,6)(2,5,7)     => U R' U2 R U R' U R U2 R U' R' U2 R U' R' U'
(1,10,8,3,6)(2,5)(7,9)  => U2 R U R' U R' U U R U R' U R U R U R' U R U2 R' U
(1,10,8,3,6)(2,5,9)     => U R U R' U R U2 R' U R U R' U R U2 R' U R U' R'
(1,10,8,3,6)(2,5,7,9,4) => U2 R U R' U2 R' U' R U' R' U2 R U'
(1,10,8,3,6)(2,5,4)     => U R U' R' U2 R U' R' U'
(1,10,8,3,6)(2,5,9,7,4) => U R U R' U R U2 R' U R U' R' U' R U2 R' U' R U R'
(1,10,8,3,6)(2,5,4,7,9) => U2 R U R' U R U2 R' U' R U' R'
(1,10,8,3,6)(2,5)(4,7)  => U R U2 R' U R U R' U2 U R' U2 R U R' U R
(1,10,8,3,6)(2,5,9,4,7) => U R U R' U R U R' U' R U2 R' U' R U' R' U'
(1,10,6,3)(2,5,4,9)     => U R U' R' U R U R' U2 R' U' R U' R' U2 R U'
(1,10,6,3)(2,5,7)(4,9)  => U R' U2 R U R' U R U' R U' R' U' U' R U' R' U' R U' R' U'
(1,10,6,3)(2,5)(4,9,7)  => U' R U2 R' U' R U' R' U' R U R' U R U' R'
(1,10,6,3)(2,5,4,7)     => U R U2 R' U R U R' U2
(1,10,6,3)(2,5,9)(4,7)  => U R U R' U R U R' R' U' R U' R' U2 R2 U R' U R U2 R' U
(1,10,6,3)(2,5)(4,7,9)  => U2 R U R' U U R' U U R U R' U R U' R U2 R' U' R U' R' U'
(1,10,6,3)(2,5,4)(7,9)  => U' R U2 R' U' R U' R' U R U R'
(1,10,6,3)(2,5,9,4)     => U2 R U' R' U2 R U' R' U' R U' R' U'
(1,10,6,3)(2,5,7,4)     => U' R U2 R' U' R U2 R' U2 R U' R'
(1,10,6,3)(2,5)         => U R U2 R' U R U' R' U' R U' R' U R U R' U R U2 R' U
(1,10,6,3)(2,5,7,9)     => U2 R U R' U2 R U2 R' U' R U' R' U' R U2 R' U' R U' R' U'
(1,10,6,3)(2,5,9,7)     => U R U R' U R U R' U' R' U2 R U R' U R
(1,10)(2,5,4,9,7)(6,8)  => R U R' U R U2 R' U R U' R' U2
(1,10)(2,5)(4,9)(6,8)   => U R U R' U R U2 R' U R U R' U R U2 R' U2 R U' R' U' R U R' U'
(1,10)(2,5,7,4,9)(6,8)  => U R U' R' U R U R' U' R U2 R' U' R U' R' U'
(1,10)(2,5,4)(6,8)      => U R U R' U R U2 R' U R' U' R U' R' U' U' R U' R U' R' U' R U2 R' U'
(1,10)(2,5,9,7,4)(6,8)  => U R U R' U R U R' U2
(1,10)(2,5,7,9,4)(6,8)  => U2 R U R' U2 U R' U2 R U R' U R
(1,10)(2,5,4,7,9)(6,8)  => U2 R U R' U2 R U R' U R U2 R' U
(1,10)(2,5,9,4,7)(6,8)  => U R U R' U R U' R' U' R U' R' U R U R' U R U2 R' U
(1,10)(2,5)(4,7)(6,8)   => U R' U2 R U R' U R U2 R U' R' U' R U2 R' U'
(1,10)(2,5)(6,8)(7,9)   => U' R U2 R' U' R U' R2 U2 R U R' U R2 U' R' U2
(1,10)(2,5,7)(6,8)      => U R U' R' U' R U2 R' U'
(1,10)(2,5,9)(6,8)      => U' R U2 R' U' R U' R' U' R U R' U R U R' U' U' R U' R' U' R U' R'
(1,10,3,8)(2,5,9,7)     => R U R' U R U R' U' R U' R'
(1,10,3,8)(2,5)         => U R U2 R' U R U R' U' R U2 R' U' R U' R' U'
(1,10,3,8)(2,5,7,9)     => U2 R U R' U2
(1,10,3,8)(2,5,7,4)     => R' U' R U' R' U' U' R U' R U' R' U' R U2 R'
(1,10,3,8)(2,5,4)(7,9)  => U R U R' U R U' U' R' U' R U' R' U' R U' R'
(1,10,3,8)(2,5,9,4)     => U R U R' U R U R' U R U2 R' U' R U' R'
(1,10,3,8)(2,5,7)(4,9)  => U' R U' R' U'
(1,10,3,8)(2,5,4,9)     => U' R U2 R' U' R U' R' U' R U' R' U' R U' U2 R'
(1,10,3,8)(2,5)(4,9,7)  => U R U' R' U R U R' U U R U R' U R U2 R' U
(1,10,3,8)(2,5,9)(4,7)  => U R U R' U R U R' U R' U U R U R' U R U R U R' U R U2 R' U
(1,10,3,8)(2,5,4,7)     => U R U R' U R U2 R' U2 R' U2 R U R' U R U2 R U' R' U' R U2 R'
(1,10,3,8)(2,5)(4,7,9)  => U R' U2 R U R' U R2 U' R' U'
(1,10,6,3)(4,9)         => U' R U2 R' U' R U' R' U2 U' R U' R' U2 R U' R' U' R U' R' U'
(1,10,6,3)(4,9,5,7)     => R U R' U R U2 R' U R U' R' U
(1,10,6,3)(4,9,7,5)     => U' R U2 R' U' R U' R2 U2 R U R' U R U' R U R'
(1,10,6,3)(4,7)         => U R U R' U R U2 R' U2 R U' R' U2 R U' R'
(1,10,6,3)(4,7,9,5)     => U' R U2 R' U' R U' R2 U2 R U R' U R2 U' R' U
(1,10,6,3)(4,7,5,9)     => U R U R' U R U R' R' U' R U' R' U2 R U'
(1,10,6,3)(7,9)         => U R U R' U R U2 R' U' R U R'
(1,10,6,3)(5,9)         => U R U R' U R U R' U
(1,10,6,3)(5,7)         => U' R U2 R' U' R U' R2 U2 R U R' U R U2 R U' R' U2 R U' R'
(1,10,6,3)(4,5)         => U R U2 R' U R U' R' U' R U' R'
(1,10,6,3)(4,5,7,9)     => U2 R U R' U2 R U2 R' U' R U' R' U R U R' U R U2 R' U
(1,10,6,3)(4,5,9,7)     => R U R' U R U' R'
(1,10)(4,9,7)(6,8)      => U' R U' R' U2
(1,10)(4,9)(5,7)(6,8)   => U' R U2 R' U' R U' R' U' R U' R' U' R U' U2 R' U'
(1,10)(4,9,5)(6,8)      => U' R U2 R' U' R U' R2 U2 R U R' U R U' R U' R' U' R U' R' U'
(1,10)(4,7,5)(6,8)      => U R U R' U R U2 R' U R U R' U R U2 R' U' R U' R' U' R U2 R' U'
(1,10)(4,7)(5,9)(6,8)   => R U R' U R U R' U' R U' R' U'
(1,10)(4,7,9)(6,8)      => U2 R U R' U
(1,10)(6,8)             => R' U' R U' R' U' U' R U' R U' R' U' R U2 R' U'
(1,10)(5,9,7)(6,8)      => U R U R' U R U R' U R U2 R' U' R U' R' U'
(1,10)(5,7,9)(6,8)      => U R U R' U R U' U' R' U' R U' R' U' R U' R' U'
(1,10)(4,5)(6,8)(7,9)   => U R' U2 R U R' U R2 U' R' U2
(1,10)(4,5,7)(6,8)      => U R U2 R' U R U R' U R U2 R' U' R U' R' U' R U2 R' U' R U' R' U'
(1,10)(4,5,9)(6,8)      => U R U R' U R U R' U R' U' R U' R' U2 R2 U R' U R U2 R' U
(1,10,8,3,6)(4,9,5)     => U' R U2 R' U' R U' R' U' R U R' U R U' R' U'
(1,10,8,3,6)(4,9)(5,7)  => U R U' R' U R U' R' U' R U' R'
(1,10,8,3,6)(4,9,7)     => R U' R' U' R U2 R' U' R U R'
(1,10,8,3,6)(4,7,5)     => U' R U2 R' U' R U' R' U' R U R' U R U2 R' U' R U' R' U' U' R U' R' U'
(1,10,8,3,6)(4,7,9)     => U2 R U R' U R U2 R' U' R U' R' U' R U2 R' U' R U' R' U'
(1,10,8,3,6)(4,7)(5,9)  => U R U R' U R U R' U R U R' U R U2 R' U
(1,10,8,3,6)(4,5)(7,9)  => U2 R U R' U R' U2 R U R' U R
(1,10,8,3,6)(4,5,9)     => U R U R' U R U R' U2 R' U U R U R' U R U R U R' U R U2 R' U
(1,10,8,3,6)(4,5,7)     => U R U2 R' U R U R' U
(1,10,8,3,6)(5,7,9)     => U' R U2 R' U' R U' R' U R U R' U'
(1,10,8,3,6)            => U' R U2 R' U' R U2 R' U2 R U' R' U'
(1,10,8,3,6)(5,9,7)     => U R U R' U R U R' U2 R U2 R' U' R U' R' U R U R' U R U2 R' U
(1,10,3,8)(4,7)         => U' R U2 R' U' R U' R' U' R' U' R U' R' U' U' R U' R U' R' U' R U2 R'
(1,10,3,8)(4,7,9,5)     => U2 R U R' U R' U' R U' R' U2 R2 U R' U R U2 R' U
(1,10,3,8)(4,7,5,9)     => U R U R' U R U R' U R' U2 R U R' U R
(1,10,3,8)(5,9)         => U R U R' U R U2 R' U R U' R' U' R U2 R' U' R U R' U'
(1,10,3,8)(5,7)         => U' R U2 R' U' R U2 R' U' R U2 R'
(1,10,3,8)(7,9)         => U' U' R U' R' U' R U' R'
(1,10,3,8)(4,9)         => R' U' R U' R' U2 R U' U2 R U' R' U'
(1,10,3,8)(4,9,5,7)     => U R U' R' U R U R2 U' R U' R' U2 R U'
(1,10,3,8)(4,9,7,5)     => U R U' R' U R U R' U
(1,10,3,8)(4,5,9,7)     => U R' U2 R U R' U R U' R U' R' U' R U' R'
(1,10,3,8)(4,5)         => U R U U R' U R U R' U R U R' U R U2 R' U
(1,10,3,8)(4,5,7,9)     => U2 R U R' U R U2 R' U' R U' R' U'
(1,10,8,3,6)(2,9,5,7,4) => R' U' R U' R' U2 R2 U R' U'
(1,10,8,3,6)(2,9,4)     => R U R' U R U R' U U R U R'
(1,10,8,3,6)(2,9,7,5,4) => R U R' U R U R' U U R U R' U' R' U' R U' R' U2 R U'
(1,10,8,3,6)(2,9)(5,7)  => U' R U2 R' U' R U' R' U2 R U' R'
(1,10,8,3,6)(2,9,7)     => U' R U2 R' U' R U' R' U' R U R' U R U2 R' U2 R U' R' U' R U2 R' U' R U R'
(1,10,8,3,6)(2,9,5)     => U R U R' U R U2 R' U R U R' U R U' R' U'
(1,10,8,3,6)(2,9,4,5,7) => R U R' U R U R' U2 R U R' U U R' U2 R U R' U R
(1,10,8,3,6)(2,9)(4,5)  => U' R U2 R' U' R U' R' U' R U R' U R U2 R' U R U' R'
(1,10,8,3,6)(2,9,7,4,5) => U' R U2 R' U' R U' R' U' R U' R' U' R U' U' R' U' R U R'
(1,10,8,3,6)(2,9,5,4,7) => U R U R' U R U2 R' U2 R' U2 R U R' U R U' R U R' U'
(1,10,8,3,6)(2,9)(4,7)  => U' R U2 R' U' R U' R' U' R' U' R U' R' U' U' R U R U' R'
(1,10,8,3,6)(2,9,4,7,5) => R U R' U R U R' U U R U R' U U R U2 R' U' R U' R'
(1,10)(2,9,7,5,4)(6,8)  => R U R' U R U R' U2 R U R' R' U2 R U R' U R
(1,10)(2,9,5,7,4)(6,8)  => U R U R' U R U2 R' U R U R' U R U R' U' R U' R' U'
(1,10)(2,9,4)(6,8)      => R U R' U R U2 R' U2 R U' R' U' R U R' U'
(1,10)(2,9,5,4,7)(6,8)  => R U R' U R U R' U U R U R' U U
(1,10)(2,9,4,7,5)(6,8)  => U R U R' U R U2 R' U R U' R' U' R U R' U'
(1,10)(2,9)(4,7)(6,8)   => U R U R' U R U2 R' U' R U' R' U' U' R U' R' U' R U' R'
(1,10)(2,9)(4,5)(6,8)   => R U R' U R U R' U' U' R U' R' U' R U' R'
(1,10)(2,9,7,4,5)(6,8)  => U' R U2 R' U' R U' R' U' U' R U' R' U' U'
(1,10)(2,9,4,5,7)(6,8)  => R U R' U R U R' U U R U R' U R' U' R U' R' U2 R U'
(1,10)(2,9,7)(6,8)      => U' R U2 R' U' R U' R' U' R U R' U R U2 R' U R U' R' U2
(1,10)(2,9)(5,7)(6,8)   => U' R U2 R' U' R U' R2 U2 R U R' U R U' R U' R' U' U' R U' R' U' R U' R'
(1,10)(2,9,5)(6,8)      => U R U R' U R U2 R' U2 R' U2 R U R' U R U' R U' R' U' R U' R' U'
(1,10,3,8)(2,9,7,4)     => R U R' U R U R' U U R U2 R' U R U2 R' U
(1,10,3,8)(2,9,4)(5,7)  => U' R U2 R' U' R U' R' U' R U R' U R U2 R' U R U' R' U'
(1,10,3,8)(2,9,5,4)     => U' R U2 R' U' R U' R' U' R U' R' U' R U' U' R' U' R U R' U'
(1,10,3,8)(2,9,5,7)     => R U R' U R U R' U U R U R' U R U2 R' U' R U' R'
(1,10,3,8)(2,9)         => U R U R' U R U2 R' U R U' R' U' R U R'
(1,10,3,8)(2,9,7,5)     => R U R' U R U R' U U R U R' U'
(1,10,3,8)(2,9)(4,7,5)  => U' R U2 R' U' R U' R2 U2 R U R' U R U R U' R' U' R U R'
(1,10,3,8)(2,9,4,7)     => U' R U2 R' U' R U' R' U' U' R U' R' U'
(1,10,3,8)(2,9,5)(4,7)  => R U R' U R U R' U U R U R' U U R' U' R U' R' U2 R U'
(1,10,3,8)(2,9)(4,5,7)  => R U R' U R U2 R' U2 R U' R' U' R U R'
(1,10,3,8)(2,9,7)(4,5)  => U R U R' U R U2 R' U R U R' U R U R' U' R U' R'
(1,10,3,8)(2,9,4,5)     => U' R U2 R' U' R U' R' U' R' U' R U' R' U' U' R U R U' R' U'
(1,10,6,3)(2,9,7,5)     => U R U R' U R U2 R' U2 R' U2 R U R' U R U' R U R'
(1,10,6,3)(2,9)         => R U R' U R U R' U U R U R2 U' R U' R' U2 R U'
(1,10,6,3)(2,9,5,7)     => R U R' U R U R' U U R U R' U U R U R' U R U2 R' U
(1,10,6,3)(2,9)(4,5,7)  => R U R' U R U R' U U R U R' U
(1,10,6,3)(2,9,7)(4,5)  => R' U' R U' R' U2 R2 U R'
(1,10,6,3)(2,9,4,5)     => U R U R' U R U2 R' U' R U' R' U' U' R U' R' U' R U' R' U'
(1,10,6,3)(2,9,4)(5,7)  => R U R' U R U R' U' U' R U' R' U' R U' R' U'
(1,10,6,3)(2,9,5,4)     => U' R U2 R' U' R U' R' U' U' R U' R' U' U2
(1,10,6,3)(2,9,7,4)     => U R U R' U R U2 R' U R U R' U R U' R'
(1,10,6,3)(2,9,5)(4,7)  => R U R' U R U R' U U R U R' U U2 R' U2 R U R' U R
(1,10,6,3)(2,9)(4,7,5)  => U' R U2 R' U' R U' R' U' U' R U' R' U' R U2 R' U' R U' R'
(1,10,6,3)(2,9,4,7)     => U' R U2 R' U' R U' R2 U2 R U R' U R U' R U' R' U' U' R U' R' U' R U' R' U'

maven构建archetype多模块工程模板的问题

今天遇到了maven创建archetype多模块工程时的很多问题, 记录一下

archetype工程的创建可以参考:

问题如下:

  • 多模块时生成archetype-metadata.xml的问题
    • 单模块工程时, 可以直接写archetype-metadata.xml文件
    • 多模块工程时, 不可以写archetype-metadata.xml, 因为外层工程没有src目录
    • 解决方案: 多模块工程可以配置出archetype-metadata.xml, 参考 这里
  • 无法拷贝.gitignore文件的问题

解决方案如下:

  • 将.gitignore改名为__gitignore__
  • 创建archetype.properties文件
## generate for archetype-metadata.xml
excludePatterns=archetype.properties,*.iml,.idea/,.idea/libraries,logs/,build.sh


## generate .gitignore file
gitignore=.gitignore
  • 修改pom文件, 多模块工程最外层的pom文件
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-resources-plugin</artifactId>
                <version>3.0.2</version>
                <configuration>
                    <addDefaultExcludes>false</addDefaultExcludes>      <!-- 解决复制.gitignore的问题 -->
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-archetype-plugin</artifactId>
                <version>3.0.1</version>
                <configuration>
                    <propertyFile>archetype.properties</propertyFile>   <!-- 解决排除.idea目录的问题 -->
                </configuration>
            </plugin>
        </plugins>
    </build>

完美解决以上两个问题

java native方法列表

想了解一下JDK里有多少方法是用navtive实现的, 所以统计了下


java.lang.Object.registerNatives();
java.lang.Object.getClass();
java.lang.Object.hashCode();
java.lang.Object.clone();
java.lang.Object.notify();
java.lang.Object.notifyAll();
java.lang.Object.wait(long timeout);

java.lang.String.intern();

java.lang.Throwable.fillInStackTrace();
java.lang.Throwable.getStackTraceDepth();
java.lang.Throwable.getStackTraceElement(int index);

java.lang.Class.registerNatives();
java.lang.Class.forName0(String native, boolean initialize, ClassLoader loader);
java.lang.Class.isInstance(Object obj);
java.lang.Class.isAssignableFrom(Class<?> cls);
java.lang.Class.isInterface();
java.lang.Class.isArray();
java.lang.Class.isPrimitive();
java.lang.Class.getName0();
java.lang.Class.getClassLoader0();
java.lang.Class.getSuperclass();
//.......

java.lang.System.registerNatives();
java.lang.System.setIn0(InputStream);
java.lang.System.setOut0(PrintStream);
java.lang.System.setErr0(PrintStream);
java.lang.System.currentTimeMillis();
java.lang.System.nanoTime();
java.lang.System.arraycopy(Object, int, Object, int, int);
java.lang.System.identityHashCode(Object);
java.lang.System.initProperties(Properties);
java.lang.System.mapLibraryName(String);


java.lang.Thread.registerNatives();
java.lang.Thread.currentThread();
java.lang.Thread.yield();
java.lang.Thread.sleep(long);
java.lang.Thread.start0();
java.lang.Thread.isInterrupted(boolean);
java.lang.Thread.isAlive();
java.lang.Thread.holdsLock(Object);
java.lang.Thread.dumpThreads(Thread[]);
java.lang.Thread.getThreads();
//......

java.lang.reflect.Proxy.defineClass0(ClassLoader, String, byte[], int, int);

得出以下结论:

  • 这里的Object,Class,Throwable,System,Thread 都是比较底层的功能,都有native的方法
  • 直接依赖了包装了native的类, 如
    • Math -> StrictMath
    • File -> FileSystem
    • Socket -> PlainSocketImpl
  • java.lang.reflect包里的多数是Pojo, 都是从Class获取到的Pojo, 然后是纯内存操作, 但 Array 比较例外
  • 有很多纯内存计算, 没有使用native方法了, 如
    • String里编码转换
    • Date的api
    • ArrayList, HashMap的API
    • 对象的序列化
    • BigInteger, BigDecimal数字运算
    • 字符串格式化
  • System, Thread, Runtime, Process都是系统核心紧密的, 几乎都需要调用至native方法的
  • Class, Object则是语言相关的, 需要操作至字节码, 也几乎都是调用至native方法的
  • 还有比较特殊的 sun.misc.Unsafe 类, 主要是互斥锁类的API, 用于concurrent包

而jdk之上, 几乎就很少有native了, 如以下

  • http的实现
  • sql,jdbc,log的实现
  • 各类app应用

所以总结了下, 涉及native的共几类

  • 系统相关的 System, Runtime, Process, Thread, Unsafe, File, Socket
  • 语言相关的 Object, Class, Array, ClassLoader
  • 计算密集型的 StrictMath

其实看native源代码是最直观的了, 点击 http://hg.openjdk.java.net/jdk7u/jdk7u/jdk/file/tip/src/share/native/java/lang/ 或 https://github.com/dmlloyd/openjdk/tree/jdk7u/jdk7u/jdk/src/share/native/java/lang

升级jekyll

原先博客是使用 octopress 搭建的blog, jekyll版本是0.12 其中一个代码弊端是blog的源码中, source与octopress的部分代码耦合 所以希望能将代码分离, 这里采用直接jekyll的方案

使用jekyll的方案

  • jekyll3 需要ruby2.0以上版本,安装总是出错,解决方案
sudo ln -sf ~/.rvm/rubies/ruby-2.2.1/bin/ruby /usr/bin/ruby
sudo ln -sf ~/.rvm/rubies/ruby-2.2.1/bin/gem /usr/bin/gem
  • jekyll3升级了很多基本组件, 也存在很多的不兼容
    markdown的解析组件有maruku|rdiscount|redcarpet|kramdown, 其中默认移除redcarpet, 采用kramdown

    highlighter的解析组件有pygments coderay rouge, 其中默认中移除pygments, 采用rouge
  • 原先的markdown使用```做为code block的符号, 新的kramdown没有默认支持

    • jekyll2中使用 kramdown.input=GFM , 可以继续使用
    • jekyll3.1.1时, 因为bug的原因, 无法支持, 参考 http://www.tuicool.com/articles/aQ3aqq 可以解决
    • 但是```前有没有换行符, 对页面的展现, 有着不同的展示方案

自己遇到的一些bug

  • Q: Don’t know how to build task ‘default’
  • A: rake -v 不支持, 应该是 rake -V ,也就是说后面的命令有问题
  • Q: jekyll requires Ruby version >= 2.0.0.
  • A: rvm是安排在当前用户的, sudo时使用的 /usr/bin/ruby /usr/bin/gem的, 需要修正 另外: ubuntu的ruby2.0也有问题, 切换至/usr/bin/ruby切换至rvm的2.2时, 问题解决
  • Q: ERROR: While executing gem … (TypeError) no implicit conversion of nil int
  • A: 同上

参考文档:

  1. Jekyll kramdown配置

mybatis 动态扫描xml

之前在java工程中引入mybatis, 在配置xml时总是这样子的

	<bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
		<property name="mapperInterface" value="com.company.application.mapper.auth.UserMapper" />
		<property name="sqlSessionFactory" ref="sqlSessionFactory" />
	</bean>
	
	<bean id="permissionMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
		<property name="mapperInterface" value="com.company.application.mapper.auth.PermissionMapper" />
		<property name="sqlSessionFactory" ref="sqlSessionFactory" />
	</bean>
	
	<bean id="roleMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
		<property name="mapperInterface" value="com.company.application.mapper.auth.RoleMapper" />
		<property name="sqlSessionFactory" ref="sqlSessionFactory" />
	</bean>

系统每增加一个mapper都要去配置一个bean, 这样不仅繁锁,而且多人编辑文件时,容易引起代码冲突

其实可以使用自动扫描的方式去加载所有的mapper文件,方法如下:

	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
		<property name="basePackage" value="com.company.application.mapper" />
		<property name="sqlSessionFactory" ref="sqlSessionFactory" />
	</bean>

这个MapperScannerConfigurer是在mybatis-spring包中定义的 引入方法为

	<dependency>
		<groupId>org.mybatis</groupId>
		<artifactId>mybatis-spring</artifactId>
		<version>1.1.1</version>
	</dependency>

如果是 MyBatis-Spring 1.2.0 以上, 还有一种更简单的方法, 见http://mybatis.github.io/spring/mappers.html (英文) 或http://mybatis.github.io/spring/zh/mappers.html (中文)

ruby语法糖 - 多返回值

前几天写代码的时候, 使用到了ruby的多返回值, 觉得很值得写一写

记得第一次看见多返回值, 是在lua中, 当时觉得不过是一语法糖, 没什么特别的, 并不会带来什么特别的好处, 就没有细细研究下去

多返回值, 比较经典的使用场景是交换数值, 最常用于排序等各类算法中, 比如

	list[i],list[j] = list[j], list[i]
	width, height = height, width

而实际中, 我碰到的使用场景是这样的, 解析一个文本文件

常见的写法这样的

    IO.read('20140119_result.txt').lines.each { |line|
        words = line.split(',')
        id = words[0]
        name = words[1]
        type = words[2]
        status = words[3]
        
        puts "[#{status}] #{name}/#{id}" if type == 1
    }   

如果用多返回值, 效果就完全不同了, 而且达到了相同的效果

	IO.read('20140119_result.txt').lines.each { |line|
		id,name,type,status = line.split(',')
		puts "[#{status}] #{name}/#{id}" if type == 1
	}

在java中, 经常见一些让我很痛苦的写法, 如

	Result<PairValue> result = NoSql.getValue(key);
	if(!result.isSuccess || result.getResult() == null || result.getResult().getValue() == null) {
		logger.error("......", result.getError());
	}
	Model model = result.getResult().getValue();

单独看这行代码, 你觉得无所谓, 但是一个方法里, 只有四行逻辑, 但却有16行代码,其中12个是这种判断,你就是发疯了,看代码太累了,无法直接看到主要的逻辑

	model, key, err = NoSql.getValue(key);
	logger.error("....", err) if err

	List, err = Service.query(model.itemIds)
	logger.error("....", err) if err

纵观代码, 会把注意力集中到业务逻辑上, 而不是各种返回结果的判断上

本质

让我们来看看, ruby多返回值的本质

	def multi
		return 1,2,3,4,5,6
	end
	result = multi
	puts result.class   ## Array
	puts result === [1,2,3,4,5,6]  ## true 

我们发现, 原来ruby的多返回值就是一个数组, 而且

  • x=1,2,3,4,5,6 与 x=[1,2,3,4,5,6] 写法是一样的,结果也一样
  • x,y=1,2,3,4,5,6 与 x,y=[1,2,3,4,5,6] 写法也是一样的,结果也一样
  • 不一样的一点是 [1,2,3,4,5,6].class 与 (1,2,3,4,5,6).class 是不一样的, 后面会报语法错误
  • 因此, 不带中括号, 其实是一种简写的方式, 只是有些地方能简单, 有些地方无法简写
  • 从另一个角度来看, []其实也是一种运算符号, 与()一样, 是为了提高运算符的优先级

ruby Enumerator

之前看到这样的API文档

关于数组Array的

map { |item| block } → new_ary click to toggle source
map → Enumerator
Invokes the given block once for each element of self.

Creates a new array containing the values returned by the block.

See also Enumerable#collect.

If no block is given, an Enumerator is returned instead.

当时不明白, Array的map方法不带参数时返回 Enumerator, 而Array已经支持各类迭代操作了, 为什么还要返回Enumerator, 与数组的操作有什么区别呢, 当时没有细究, 今天知道了

我们知道数组是继承自Enumerable的

irb(main):077:0> [].class.ancestors
=> [Array, Enumerable, Object, Kernel, BasicObject]

数组中的方法, 会比Enumerable多一些数组特色的方法, 如insert,push,pop,fist,last

而Enumerable调用map时, 有一些常用的方法, 无法满足, 比如

	[2,3,5,7,9,11].map {|item,index| item+index}

map时, 参数中的第一个参数, 为item, 但是不支持索引位置

而像select, count, reject 等方法时, 同样也不支持索引位置

于是Enumerator发挥作用了, 注意这里不是Enumerable

irb(main):071:0> [].map.methods - [].methods
=> [:with_index, :with_object, :next_values, :peek_values, :next, :peek, :feed, :rewind]

所以

irb(main):109:0> [2,3,5,7,9,11].map.with_index {|item,index| item+index}
=> [2, 4, 7, 10, 13, 16]

结论: Array中map,select,count,reject时, 如果不带闭包参数, 将返回Enumerator, 这时可继续使用索引参数

这里是ruby的官方文档, Enumerator的API