commit 8afa10ef97c0dc214f52ac2a61f84eb312375836
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Wed Mar 29 23:57:49 2023 +0200

    Dino4 solver: skeleton.

diff --git a/src/main/java/org/distorted/solvers/ImplementedSolversList.java b/src/main/java/org/distorted/solvers/ImplementedSolversList.java
index 6121e1f2..28975b0f 100644
--- a/src/main/java/org/distorted/solvers/ImplementedSolversList.java
+++ b/src/main/java/org/distorted/solvers/ImplementedSolversList.java
@@ -25,7 +25,8 @@ public enum ImplementedSolversList
   TOWER          (ObjectSignatures.CU_232, R.string.solver_cu232_title, R.string.solver_cu232_description, true),
   DIAMOND        (ObjectSignatures.DIAM_2, R.string.solver_diam2_title, R.string.solver_diam2_description, true),
   JING2          (ObjectSignatures.JING_2, R.string.solver_jing2_title, R.string.solver_jing2_description, true),
-  DINO6          (ObjectSignatures.DINO_3, R.string.solver_dino6_title, R.string.solver_dino6_description, false),
+  DINO6          (ObjectSignatures.DINO_3, R.string.solver_dino6_title, R.string.solver_dino6_description, true),
+  DINO4          (ObjectSignatures.DIN4_3, R.string.solver_dino4_title, R.string.solver_dino4_description, false),
   PDIA           (ObjectSignatures.PDIA_3, R.string.solver_pdia_title, R.string.solver_pdia_description, false),
   ;
 
diff --git a/src/main/java/org/distorted/solvers/SolverDino4.java b/src/main/java/org/distorted/solvers/SolverDino4.java
new file mode 100644
index 00000000..47081c69
--- /dev/null
+++ b/src/main/java/org/distorted/solvers/SolverDino4.java
@@ -0,0 +1,126 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Copyright 2023 Leszek Koltunski                                                               //
+//                                                                                               //
+// This file is part of Magic Cube.                                                              //
+//                                                                                               //
+// Magic Cube is proprietary software licensed under an EULA which you should have received      //
+// along with the code. If not, check https://distorted.org/magic/License-Magic-Cube.html        //
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+package org.distorted.solvers;
+
+import android.content.res.Resources;
+
+import org.distorted.main.R;
+import org.distorted.objectlib.main.ObjectSignatures;
+import org.distorted.objectlib.main.TwistyObject;
+import org.distorted.objectlib.tablebases.ImplementedTablebasesList;
+import org.distorted.objectlib.tablebases.TBDino4;
+import org.distorted.objectlib.tablebases.TablebasesAbstract;
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+public class SolverDino4 extends SolverTablebase
+{
+  private static final int ERROR_EDGE_THREE  = -1;
+  private TablebasesAbstract mSolver;
+  private int mErrorColor;
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public SolverDino4(Resources res, TwistyObject object)
+    {
+    super(res,object);
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  private void getEdges(TwistyObject object, int[][] edges)
+    {
+    for(int i=0; i<12; i++)
+      {
+      edges[0][i] = object.getCubitFaceStickerIndex(i,0);
+      edges[1][i] = object.getCubitFaceStickerIndex(i,1);
+      }
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  private int checkEdges(int[][] edges)
+    {
+    int numBlue=0,numRed=0, numYellow=0, numWhite=0;
+
+    for(int i=0; i<12; i++)
+      {
+      int e = edges[0][i];
+
+      if( e==edges[1][i] )
+        switch(e)
+          {
+          case 0: numYellow++; break;
+          case 1: numWhite++ ; break;
+          case 2: numBlue++  ; break;
+          case 3: numRed++   ; break;
+          }
+      }
+
+    if( numYellow!=3 ) { mErrorColor=0; return ERROR_EDGE_THREE; }
+    if( numWhite !=3 ) { mErrorColor=1; return ERROR_EDGE_THREE; }
+    if( numBlue  !=3 ) { mErrorColor=2; return ERROR_EDGE_THREE; }
+    if( numRed   !=3 ) { mErrorColor=3; return ERROR_EDGE_THREE; }
+
+    return 0;
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public int tablebaseIndex(TwistyObject object)
+    {
+    int[][] edges = new int[2][12];
+    getEdges(object,edges);
+
+    int result1 = checkEdges(edges);
+    if( result1<0 ) return result1;
+
+    return TBDino4.indexFromPartition(edges[0]);
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  private int getColorIndex7(int color)
+    {
+    switch(color)
+      {
+      case 0: return R.string.color_yellow7;
+      case 1: return R.string.color_white7;
+      case 2: return R.string.color_blue7;
+      case 3: return R.string.color_red7;
+      }
+
+    return -1;
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public String error(int index, Resources res)
+    {
+    int i = getColorIndex7(mErrorColor);
+    String color = res.getString(i);
+
+    return res.getString(R.string.solver_generic_edge_three,color);
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public int[][] solution(int index, Resources res)
+    {
+    if( mSolver==null )
+      {
+      mSolver = ImplementedTablebasesList.createUnpacked(ObjectSignatures.DIN4_3);
+      if( mSolver!=null ) mSolver.createTablebase(-1);
+      }
+
+    return mSolver!=null ? mSolver.solution(index,null) : null;
+    }
+}  
+
diff --git a/src/main/java/org/distorted/solvers/SolverMain.java b/src/main/java/org/distorted/solvers/SolverMain.java
index 9888177b..c8d78ac2 100644
--- a/src/main/java/org/distorted/solvers/SolverMain.java
+++ b/src/main/java/org/distorted/solvers/SolverMain.java
@@ -121,6 +121,11 @@ public class SolverMain implements Runnable
       SolverTablebase solver = new SolverDino6(mRes,mObject);
       solver.solve(screen);
       }
+    else if( mSignature==ObjectSignatures.DIN4_3 )
+      {
+      SolverTablebase solver = new SolverDino4(mRes,mObject);
+      solver.solve(screen);
+      }
     else
       {
       screen.displayErrorDialog(mRes.getString(R.string.solver_generic_not_implemented));
diff --git a/src/main/res/values-de/strings.xml b/src/main/res/values-de/strings.xml
index 15c89f97..85a3ecea 100755
--- a/src/main/res/values-de/strings.xml
+++ b/src/main/res/values-de/strings.xml
@@ -100,6 +100,7 @@
     <string name="solver_generic_c_v_dont_match">Oktaederstücke und Tetraederecken passen nicht zusammen!</string>
     <string name="solver_generic_edge_mono">%1$s-%2$s Kante?</string>
     <string name="solver_generic_edge_twice">Zwei %1$s-%2$s Kanten!</string>
+    <string name="solver_generic_edge_three">Es sollten 3 %1$s Kanten sein!</string>
 
     <string name="solver_cube3_error1">Es gibt nur %1$d %2$s Facelets.</string>
     <string name="solver_cube3_error2">Nicht alle 12 Kanten gibt es genau einmal!</string>
@@ -163,6 +164,15 @@
     <string name="color_violet6">violette</string>
     <string name="color_grey6">graue</string>
 
+    <string name="color_yellow7">gelbe</string>
+    <string name="color_white7">weiße</string>
+    <string name="color_blue7">blaue</string>
+    <string name="color_green7">grüne</string>
+    <string name="color_red7">rote</string>
+    <string name="color_orange7">orange</string>
+    <string name="color_violet7">violette</string>
+    <string name="color_grey7">graue</string>
+
     <string name="solver_cube3_description">Ein nahezu perfekter, sofortiger, zweiphasiger 3x3x3-Löser.\nAutor: Herbert Kociemba.</string>
     <string name="solver_pduo2_description">Ein perfekter, sofortiger Löser.\nAutor: Leszek Koltunski.</string>
     <string name="solver_ivy_description">Ein perfekter, sofortiger Löser.\nAutor: Leszek Koltunski.</string>
@@ -172,7 +182,8 @@
     <string name="solver_cube2_description">Ein perfekter, sofortiger Löser.\nAutor: Leszek Koltunski.</string>
     <string name="solver_skew2_description">Ein perfekter, sofortiger Löser.\nAutor: Leszek Koltunski.</string>
     <string name="solver_jing2_description">Ein perfekter, sofortiger Löser.\nAutor: Leszek Koltunski.</string>
-    <string name="solver_dino6_description">Noch nicht implementiert.\nAutor: Leszek Koltunski.</string>
+    <string name="solver_dino6_description">Ein perfekter, sofortiger Löser.\nAutor: Leszek Koltunski.</string>
+    <string name="solver_dino4_description">Ein perfekter, sofortiger Löser.\nAutor: Leszek Koltunski.</string>
     <string name="solver_pdia_description">Noch nicht implementiert.\nAutor: Leszek Koltunski.</string>
 
     <string name="ms_placeholder">%1$d ms</string>
diff --git a/src/main/res/values-es/strings.xml b/src/main/res/values-es/strings.xml
index 1b3c2edb..bd451f92 100755
--- a/src/main/res/values-es/strings.xml
+++ b/src/main/res/values-es/strings.xml
@@ -100,6 +100,7 @@
     <string name="solver_generic_c_v_dont_match">¡Las piezas octaédricas y las esquinas tetraédricas no coinciden!</string>
     <string name="solver_generic_edge_mono">Borde %1$s-%2$s?</string>
     <string name="solver_generic_edge_twice">¡Dos bordes %1$s-%2$s!</string>
+    <string name="solver_generic_edge_three">¡Debe haber 3 bordes %1$s!</string>
 
     <string name="solver_cube3_error1">Solo hay %1$d facetas %2$s.</string>
     <string name="solver_cube3_error2">¡No todos los 12 bordes existen exactamente una vez!</string>
@@ -163,6 +164,15 @@
     <string name="color_violet6">violeta</string>
     <string name="color_grey6">gris</string>
 
+    <string name="color_yellow7">amarillas</string>
+    <string name="color_white7">blancos</string>
+    <string name="color_blue7">azules</string>
+    <string name="color_green7">verdes</string>
+    <string name="color_red7">rojos</string>
+    <string name="color_orange7">naranjas</string>
+    <string name="color_violet7">violetas</string>
+    <string name="color_grey7">grises</string>
+
     <string name="solver_cube3_description">Un 3x3x3 solucionador casi perfecto, instantáneo, de dos fases.\nAutor: Herbert Kociemba.</string>
     <string name="solver_pduo2_description">Un solucionador perfecto e instantáneo.\nAutor: Leszek Koltunski.</string>
     <string name="solver_ivy_description">Un solucionador perfecto e instantáneo.\nAutor: Leszek Koltunski.</string>
@@ -172,7 +182,8 @@
     <string name="solver_cube2_description">Un solucionador perfecto e instantáneo.\nAutor: Leszek Koltunski.</string>
     <string name="solver_skew2_description">Un solucionador perfecto e instantáneo.\nAutor: Leszek Koltunski.</string>
     <string name="solver_jing2_description">Un solucionador perfecto e instantáneo.\nAutor: Leszek Koltunski.</string>
-    <string name="solver_dino6_description">Aun no implementado.\nAutor: Leszek Koltunski.</string>
+    <string name="solver_dino6_description">Un solucionador perfecto e instantáneo.\nAutor: Leszek Koltunski.</string>
+    <string name="solver_dino4_description">Un solucionador perfecto e instantáneo.\nAutor: Leszek Koltunski.</string>
     <string name="solver_pdia_description">Aun no implementado.\nAutor: Leszek Koltunski.</string>
 
     <string name="ms_placeholder">%1$d ms</string>
diff --git a/src/main/res/values-fr/strings.xml b/src/main/res/values-fr/strings.xml
index f55a273a..4283c95c 100755
--- a/src/main/res/values-fr/strings.xml
+++ b/src/main/res/values-fr/strings.xml
@@ -100,6 +100,7 @@
     <string name="solver_generic_c_v_dont_match">Les pièces octaédriques et les coins tétraédriques ne correspondent pas !</string>
     <string name="solver_generic_edge_mono">Bord %1$s-%2$s?</string>
     <string name="solver_generic_edge_twice">Deux bords %1$s-%2$s !</string>
+    <string name="solver_generic_edge_three">Il devrait y avoir 3 bords %1$s !</string>
 
     <string name="solver_cube3_error1">Il n\'y a que %1$d facettes %2$s.</string>
     <string name="solver_cube3_error2">Les 12 arêtes n\'existent pas exactement une fois !</string>
@@ -163,6 +164,15 @@
     <string name="color_violet6">violet</string>
     <string name="color_grey6">gris</string>
 
+    <string name="color_yellow7">jaunes</string>
+    <string name="color_white7">blancs</string>
+    <string name="color_blue7">bleus</string>
+    <string name="color_green7">verts</string>
+    <string name="color_red7">rouges</string>
+    <string name="color_orange7">orange</string>
+    <string name="color_violet7">violets</string>
+    <string name="color_grey7">gris</string>
+
     <string name="solver_cube3_description">Un solveur 3x3x3 biphasé presque parfait, instantané.\nAuteur: Herbert Kociemba.</string>
     <string name="solver_pduo2_description">Un solveur parfait et instantané.\nAuteur: Leszek Koltunski.</string>
     <string name="solver_ivy_description">Un solveur parfait et instantané.\nAuteur: Leszek Koltunski.</string>
@@ -170,10 +180,11 @@
     <string name="solver_pyra3_description">Un solveur parfait et instantané.\nAuteur: Leszek Koltunski.</string>
     <string name="solver_diam2_description">Un solveur parfait et instantané.\nAuteur: Leszek Koltunski.</string>
     <string name="solver_cube2_description">Un solveur parfait et instantané.\nAuteur: Leszek Koltunski.</string>
-    <string name="solver_skew2_description">Un solveur parfait et instantané.\nAutor: Leszek Koltunski.</string>
-    <string name="solver_jing2_description">Un solveur parfait et instantané.\nAutor: Leszek Koltunski.</string>
-    <string name="solver_dino6_description">Pas encore mis en œuvre.\nAutor: Leszek Koltunski.</string>
-    <string name="solver_pdia_description">Pas encore mis en œuvre.\nAutor: Leszek Koltunski.</string>
+    <string name="solver_skew2_description">Un solveur parfait et instantané.\nAuteur: Leszek Koltunski.</string>
+    <string name="solver_jing2_description">Un solveur parfait et instantané.\nAuteur: Leszek Koltunski.</string>
+    <string name="solver_dino6_description">Un solveur parfait et instantané.\nAuteur: Leszek Koltunski.</string>
+    <string name="solver_dino4_description">Un solveur parfait et instantané.\nAuteur: Leszek Koltunski.</string>
+    <string name="solver_pdia_description">Pas encore mis en œuvre.\nAuteur: Leszek Koltunski.</string>
 
     <string name="ms_placeholder">%1$d ms</string>
     <string name="lv_placeholder">Niveau %1$d</string>
diff --git a/src/main/res/values-ja/strings.xml b/src/main/res/values-ja/strings.xml
index 9f01ea1d..4bf755bc 100755
--- a/src/main/res/values-ja/strings.xml
+++ b/src/main/res/values-ja/strings.xml
@@ -100,6 +100,7 @@
     <string name="solver_generic_c_v_dont_match">八面体のピースと四面体の角が一致しません!</string>
     <string name="solver_generic_edge_mono">%1$s%2$s エッジ?</string>
     <string name="solver_generic_edge_twice">2 つの %1$s-%2$s エッジ!</string>
+    <string name="solver_generic_edge_three">3 つの %1$s エッジがあるはずです!</string>
 
     <string name="solver_cube3_error1">%2$s小顔は%1$dつだけ</string>
     <string name="solver_cube3_error2">12 のエッジすべてが 存在するわけではありません。</string>
@@ -163,6 +164,15 @@
     <string name="color_violet6">バイオレット</string>
     <string name="color_grey6">グレー</string>
 
+    <string name="color_yellow7">イエロー</string>
+    <string name="color_white7">ホワイト</string>
+    <string name="color_blue7">ブルー</string>
+    <string name="color_green7">グリーン</string>
+    <string name="color_red7">レッド</string>
+    <string name="color_orange7">オレンジ</string>
+    <string name="color_violet7">バイオレット</string>
+    <string name="color_grey7">グレー</string>
+
     <string name="solver_cube3_description">ほぼ完璧で瞬間的な 2 フェーズ 3x3x3 ソルバー。\n著者: Herbert Kociemba.</string>
     <string name="solver_pduo2_description">完璧で瞬時のソルバー。\n著者: Leszek Koltunski.</string>
     <string name="solver_ivy_description">完璧で瞬時のソルバー。\n著者: Leszek Koltunski.</string>
@@ -170,10 +180,11 @@
     <string name="solver_pyra3_description">完璧で瞬時のソルバー。\n著者: Leszek Koltunski.</string>
     <string name="solver_diam2_description">完璧で瞬時のソルバー。\n著者: Leszek Koltunski.</string>
     <string name="solver_cube2_description">完璧で瞬時のソルバー。\n著者: Leszek Koltunski.</string>
-    <string name="solver_skew2_description">完璧で瞬時のソルバー。\nAutor: Leszek Koltunski.</string>
-    <string name="solver_jing2_description">完璧で瞬時のソルバー。\nAutor: Leszek Koltunski.</string>
-    <string name="solver_dino6_description">まだ実装されていません。\nAutor: Leszek Koltunski.</string>
-    <string name="solver_pdia_description">まだ実装されていません。\nAutor: Leszek Koltunski.</string>
+    <string name="solver_skew2_description">完璧で瞬時のソルバー。\n著者: Leszek Koltunski.</string>
+    <string name="solver_jing2_description">完璧で瞬時のソルバー。\n著者: Leszek Koltunski.</string>
+    <string name="solver_dino6_description">完璧で瞬時のソルバー。\n著者: Leszek Koltunski.</string>
+    <string name="solver_dino4_description">完璧で瞬時のソルバー。\n著者: Leszek Koltunski.</string>
+    <string name="solver_pdia_description">まだ実装されていません。\n著者: Leszek Koltunski.</string>
 
     <string name="ms_placeholder">%1$d ms</string>
     <string name="lv_placeholder">レベル %1$d</string>
diff --git a/src/main/res/values-ko/strings.xml b/src/main/res/values-ko/strings.xml
index e08d7aba..b0c1959a 100755
--- a/src/main/res/values-ko/strings.xml
+++ b/src/main/res/values-ko/strings.xml
@@ -100,6 +100,7 @@
     <string name="solver_generic_c_v_dont_match">팔면체 조각과 사면체 모서리가 일치하지 않습니다!</string>
     <string name="solver_generic_edge_mono">%1$s%2$s 에지?</string>
     <string name="solver_generic_edge_twice">두 개의 %1$s-%2$s 모서리!</string>
+    <string name="solver_generic_edge_three">3개의 %1$s 모서리가 있어야 합니다!</string>
 
     <string name="solver_cube3_error1">%2$s작은 얼굴은  %1$d개뿐입니다.</string>
     <string name="solver_cube3_error2">12개의 가장자리 모두가 정확하게 한 번 존재하지 않습니다!</string>
@@ -163,6 +164,15 @@
     <string name="color_violet6">제비꽃</string>
     <string name="color_grey6">회색</string>
 
+    <string name="color_yellow7">노란색</string>
+    <string name="color_white7">흰색</string>
+    <string name="color_blue7">블루</string>
+    <string name="color_green7">그린</string>
+    <string name="color_red7">빨간색</string>
+    <string name="color_orange7">주황색</string>
+    <string name="color_violet7">제비꽃</string>
+    <string name="color_grey7">회색</string>
+
     <string name="solver_cube3_description">거의 완벽하고 즉각적인 2상 3x3x3 솔버입니다.\n작가: Herbert Kociemba.</string>
     <string name="solver_pduo2_description">완벽하고 즉각적인 솔버.\n작가: Leszek Koltunski.</string>
     <string name="solver_ivy_description">완벽하고 즉각적인 솔버.\n작가: Leszek Koltunski.</string>
@@ -170,10 +180,11 @@
     <string name="solver_pyra3_description">완벽하고 즉각적인 솔버.\n작가: Leszek Koltunski.</string>
     <string name="solver_diam2_description">완벽하고 즉각적인 솔버.\n작가: Leszek Koltunski.</string>
     <string name="solver_cube2_description">완벽하고 즉각적인 솔버.\n작가: Leszek Koltunski.</string>
-    <string name="solver_skew2_description">완벽하고 즉각적인 솔버.\nAutor: Leszek Koltunski.</string>
-    <string name="solver_jing2_description">완벽하고 즉각적인 솔버.\nAutor: Leszek Koltunski.</string>
-    <string name="solver_dino6_description">아직 구현되지 않음.\nAutor: Leszek Koltunski.</string>
-    <string name="solver_pdia_description">아직 구현되지 않음.\nAutor: Leszek Koltunski.</string>
+    <string name="solver_skew2_description">완벽하고 즉각적인 솔버.\n작가: Leszek Koltunski.</string>
+    <string name="solver_jing2_description">완벽하고 즉각적인 솔버.\n작가: Leszek Koltunski.</string>
+    <string name="solver_dino6_description">완벽하고 즉각적인 솔버.\n작가: Leszek Koltunski.</string>
+    <string name="solver_dino4_description">완벽하고 즉각적인 솔버.\n작가: Leszek Koltunski.</string>
+    <string name="solver_pdia_description">아직 구현되지 않음.\n작가: Leszek Koltunski.</string>
 
     <string name="ms_placeholder">%1$d ms</string>
     <string name="lv_placeholder">레벨 %1$d</string>
diff --git a/src/main/res/values-pl/strings.xml b/src/main/res/values-pl/strings.xml
index 966fe6b3..716cce9e 100644
--- a/src/main/res/values-pl/strings.xml
+++ b/src/main/res/values-pl/strings.xml
@@ -100,6 +100,7 @@
     <string name="solver_generic_c_v_dont_match">Części ośmiościenne i czworościenne rogi nie pasują do siebie!</string>
     <string name="solver_generic_edge_mono">%1$s-%2$s krawędz?</string>
     <string name="solver_generic_edge_twice">Dwie krawędzie %1$s-%2$s!</string>
+    <string name="solver_generic_edge_three">Powinny być 3 %1$s krawędzie!</string>
 
     <string name="solver_cube3_error1">Jest tylko %1$d %2$s ścian.</string>
     <string name="solver_cube3_error2">Któraś z 12 krawędzi nie istnieje!</string>
@@ -163,6 +164,15 @@
     <string name="color_violet6">fioletowej</string>
     <string name="color_grey6">szarej</string>
 
+    <string name="color_yellow7">żółte</string>
+    <string name="color_white7">białe</string>
+    <string name="color_blue7">niebieskie</string>
+    <string name="color_green7">zielone</string>
+    <string name="color_red7">czerwone</string>
+    <string name="color_orange7">pomarańczowe</string>
+    <string name="color_violet7">fioletowe</string>
+    <string name="color_grey7">szare</string>
+
     <string name="solver_cube3_description">Natychmiastowy, prawie optymalny rozwiązywacz kostki 3x3x3.\nAutor: Herbert Kociemba.</string>
     <string name="solver_pduo2_description">Optymalny, natychmiastowy rozwiązywacz.\nAutor: Leszek Koltunski.</string>
     <string name="solver_ivy_description">Optymalny, natychmiastowy rozwiązywacz.\nAutor: Leszek Koltunski.</string>
@@ -172,7 +182,8 @@
     <string name="solver_cube2_description">Optymalny, natychmiastowy rozwiązywacz.\nAutor: Leszek Koltunski.</string>
     <string name="solver_skew2_description">Optymalny, natychmiastowy rozwiązywacz.\nAutor: Leszek Koltunski.</string>
     <string name="solver_jing2_description">Optymalny, natychmiastowy rozwiązywacz.\nAutor: Leszek Koltunski.</string>
-    <string name="solver_dino6_description">Jeszcze nie zaimplementowany.\nAutor: Leszek Koltunski.</string>
+    <string name="solver_dino6_description">Optymalny, natychmiastowy rozwiązywacz.\nAutor: Leszek Koltunski.</string>
+    <string name="solver_dino4_description">Optymalny, natychmiastowy rozwiązywacz.\nAutor: Leszek Koltunski.</string>
     <string name="solver_pdia_description">Jeszcze nie zaimplementowany.\nAutor: Leszek Koltunski.</string>
 
     <string name="ms_placeholder">%1$d ms</string>
diff --git a/src/main/res/values-ru/strings.xml b/src/main/res/values-ru/strings.xml
index e31ec2b0..0a6d20f2 100755
--- a/src/main/res/values-ru/strings.xml
+++ b/src/main/res/values-ru/strings.xml
@@ -100,6 +100,7 @@
     <string name="solver_generic_c_v_dont_match">Восьмигранные фигуры и четырехгранные углы не совпадают!</string>
     <string name="solver_generic_edge_mono">%1$s-%2$s ребрo?</string>
     <string name="solver_generic_edge_twice">Два ребра %1$s-%2$s!</string>
+    <string name="solver_generic_edge_three">Должно быть 3 %1$s ребра!</string>
 
     <string name="solver_cube3_error1">Всего %1$d %2$s граней!</string>
     <string name="solver_cube3_error2">Не все 12 ребер существуют в единичном экземпляре!</string>
@@ -163,6 +164,15 @@
     <string name="color_violet6">фиолетового</string>
     <string name="color_grey6">серого</string>
 
+    <string name="color_yellow7">желтых</string>
+    <string name="color_white7">белых</string>
+    <string name="color_blue7">синих</string>
+    <string name="color_green7">зеленых</string>
+    <string name="color_red7">красных</string>
+    <string name="color_orange7">оранжевых</string>
+    <string name="color_violet7">фиолетовых</string>
+    <string name="color_grey7">серых</string>
+
     <string name="solver_cube3_description">Практически идеальный, мгновенный, двухфазный решатель 3x3x3.\nАвтор: Herbert Kociemba.</string>
     <string name="solver_pduo2_description">Идеальный, мгновенный решатель.\nАвтор: Leszek Koltunski.</string>
     <string name="solver_ivy_description">Идеальный, мгновенный решатель.\nАвтор: Leszek Koltunski.</string>
@@ -170,10 +180,11 @@
     <string name="solver_pyra3_description">Идеальный, мгновенный решатель.\nАвтор: Leszek Koltunski.</string>
     <string name="solver_diam2_description">Идеальный, мгновенный решатель.\nАвтор: Leszek Koltunski.</string>
     <string name="solver_cube2_description">Идеальный, мгновенный решатель.\nАвтор: Leszek Koltunski.</string>
-    <string name="solver_skew2_description">Идеальный, мгновенный решатель.\nAutor: Leszek Koltunski.</string>
-    <string name="solver_jing2_description">Идеальный, мгновенный решатель.\nAutor: Leszek Koltunski.</string>
-    <string name="solver_dino6_description">Еще не реализован.\nAutor: Leszek Koltunski.</string>
-    <string name="solver_pdia_description">Еще не реализован.\nAutor: Leszek Koltunski.</string>
+    <string name="solver_skew2_description">Идеальный, мгновенный решатель.\nАвтор: Leszek Koltunski.</string>
+    <string name="solver_jing2_description">Идеальный, мгновенный решатель.\nАвтор: Leszek Koltunski.</string>
+    <string name="solver_dino6_description">Идеальный, мгновенный решатель.\nАвтор: Leszek Koltunski.</string>
+    <string name="solver_dino4_description">Идеальный, мгновенный решатель.\nАвтор: Leszek Koltunski.</string>
+    <string name="solver_pdia_description">Еще не реализован.\nАвтор: Leszek Koltunski.</string>
 
     <string name="ms_placeholder">%1$d мс</string>
     <string name="lv_placeholder">Уровень %1$d</string>
diff --git a/src/main/res/values-zh-rCN/strings.xml b/src/main/res/values-zh-rCN/strings.xml
index 4de46279..e87a9d95 100644
--- a/src/main/res/values-zh-rCN/strings.xml
+++ b/src/main/res/values-zh-rCN/strings.xml
@@ -106,6 +106,7 @@
     <string name="solver_generic_c_v_dont_match">八面体块和四面体角不匹配！</string>
     <string name="solver_generic_edge_mono">%1$s%2$s 边缘？</string>
     <string name="solver_generic_edge_twice">两个 %1$s-%2$s 边！</string>
+    <string name="solver_generic_edge_three">应该有 3 %1$s 条边！</string>
 
     <string name="solver_cube3_error1">只有%1$d个%2$s小面</string>
     <string name="solver_cube3_error2">并非所有12条边都只存在一次！</string>
@@ -169,6 +170,15 @@
     <string name="color_violet6">紫色的</string>
     <string name="color_grey6">灰色的</string>
 
+    <string name="color_yellow7">黄色的</string>
+    <string name="color_white7">白色的</string>
+    <string name="color_blue7">蓝色的</string>
+    <string name="color_green7">绿色的</string>
+    <string name="color_red7">红色的</string>
+    <string name="color_orange7">橙色的</string>
+    <string name="color_violet7">紫色的</string>
+    <string name="color_grey7">灰色的</string>
+
     <string name="solver_cube3_description">一个几乎完美的、瞬时的、两相的3x3x3解算器。\n作者: Herbert Kociemba.</string>
     <string name="solver_pduo2_description">完美的即时求解器。\n作者: Leszek Koltunski.</string>
     <string name="solver_ivy_description">完美的即时求解器。\n作者: Leszek Koltunski.</string>
@@ -176,10 +186,11 @@
     <string name="solver_pyra3_description">完美的即时求解器。\n作者: Leszek Koltunski.</string>
     <string name="solver_diam2_description">完美的即时求解器。\n作者: Leszek Koltunski.</string>
     <string name="solver_cube2_description">完美的即时求解器。\n作者: Leszek Koltunski.</string>
-    <string name="solver_skew2_description">完美的即时求解器。\nAutor: Leszek Koltunski.</string>
-    <string name="solver_jing2_description">完美的即时求解器。\nAutor: Leszek Koltunski.</string>
-    <string name="solver_dino6_description">尚未实施。\nAutor: Leszek Koltunski.</string>
-    <string name="solver_pdia_description">尚未实施。\nAutor: Leszek Koltunski.</string>
+    <string name="solver_skew2_description">完美的即时求解器。\n作者: Leszek Koltunski.</string>
+    <string name="solver_jing2_description">完美的即时求解器。\n作者: Leszek Koltunski.</string>
+    <string name="solver_dino6_description">完美的即时求解器。\n作者: Leszek Koltunski.</string>
+    <string name="solver_dino4_description">完美的即时求解器。\n作者: Leszek Koltunski.</string>
+    <string name="solver_pdia_description">尚未实施。\n作者: Leszek Koltunski.</string>
 
     <string name="ms_placeholder">%1$d毫秒</string>
     <string name="lv_placeholder">%1$d级</string>
diff --git a/src/main/res/values-zh-rTW/strings.xml b/src/main/res/values-zh-rTW/strings.xml
index c8bcece2..5a4451af 100644
--- a/src/main/res/values-zh-rTW/strings.xml
+++ b/src/main/res/values-zh-rTW/strings.xml
@@ -100,6 +100,7 @@
     <string name="solver_generic_c_v_dont_match">八面體塊和四面體角不匹配！</string>
     <string name="solver_generic_edge_mono">%1$s%2$s 邊緣？</string>
     <string name="solver_generic_edge_twice">兩個 %1$s-%2$s 邊！</string>
+    <string name="solver_generic_edge_three">應該有 3 %1$s 條邊！</string>
 
     <string name="solver_cube3_error1">只有%1$d個%2$s小臉</string>
     <string name="solver_cube3_error2">並非所有12條邊都只存在一次！</string>
@@ -163,6 +164,15 @@
     <string name="color_violet6">紫色的</string>
     <string name="color_grey6">灰色的</string>
 
+    <string name="color_yellow7">黃色的</string>
+    <string name="color_white7">白色的</string>
+    <string name="color_blue7">藍色的</string>
+    <string name="color_green7">綠色的</string>
+    <string name="color_red7">紅色的</string>
+    <string name="color_orange7">橙色的</string>
+    <string name="color_violet7">紫色的</string>
+    <string name="color_grey7">灰色的</string>
+
     <string name="solver_cube3_description">一個近乎完美的瞬時兩相 3x3x3 求解器。\n作者: Herbert Kociemba.</string>
     <string name="solver_pduo2_description">完美的即時求解器。\n作者: Leszek Koltunski.</string>
     <string name="solver_ivy_description">完美的即時求解器。\n作者: Leszek Koltunski.</string>
@@ -170,10 +180,11 @@
     <string name="solver_pyra3_description">完美的即時求解器。\n作者: Leszek Koltunski.</string>
     <string name="solver_diam2_description">完美的即時求解器。\n作者: Leszek Koltunski.</string>
     <string name="solver_cube2_description">完美的即時求解器。\n作者: Leszek Koltunski.</string>
-    <string name="solver_skew2_description">完美的即時求解器。\nAutor: Leszek Koltunski.</string>
-    <string name="solver_jing2_description">完美的即時求解器。\nAutor: Leszek Koltunski.</string>
-    <string name="solver_dino6_description">尚未實現。\nAutor: Leszek Koltunski.</string>
-    <string name="solver_pdia_description">尚未實現。\nAutor: Leszek Koltunski.</string>
+    <string name="solver_skew2_description">完美的即時求解器。\n作者: Leszek Koltunski.</string>
+    <string name="solver_jing2_description">完美的即時求解器。\n作者: Leszek Koltunski.</string>
+    <string name="solver_dino6_description">完美的即時求解器。\n作者: Leszek Koltunski.</string>
+    <string name="solver_dino4_description">完美的即時求解器。\n作者: Leszek Koltunski.</string>
+    <string name="solver_pdia_description">尚未實現。\n作者: Leszek Koltunski.</string>
 
     <string name="ms_placeholder">%1$d毫秒</string>
     <string name="lv_placeholder">%1$d級</string>
diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml
index 956ea733..1ac4cdcd 100644
--- a/src/main/res/values/strings.xml
+++ b/src/main/res/values/strings.xml
@@ -120,6 +120,7 @@
     <string name="solver_generic_c_v_dont_match">Octahedral pieces and tetrahedral corners do not match!</string>
     <string name="solver_generic_edge_mono">%1$s-%2$s edge?</string>
     <string name="solver_generic_edge_twice">Two %1$s-%2$s edges!</string>
+    <string name="solver_generic_edge_three">There should be 3 %1$s edges!</string>
 
     <string name="solver_cube3_error1">There are only %1$d %2$s facelets.</string>
     <string name="solver_cube3_error2">Not all 12 edges exist exactly once!</string>
@@ -183,6 +184,15 @@
     <string name="color_violet6">violet</string>
     <string name="color_grey6">grey</string>
 
+    <string name="color_yellow7">yellow</string>
+    <string name="color_white7">white</string>
+    <string name="color_blue7">blue</string>
+    <string name="color_green7">green</string>
+    <string name="color_red7">red</string>
+    <string name="color_orange7">orange</string>
+    <string name="color_violet7">violet</string>
+    <string name="color_grey7">grey</string>
+
     <string name="solver_cube3_title" translatable="false">3x3 Cube Solver</string>
     <string name="solver_pduo2_title" translatable="false">Pyraminx Duo Solver</string>
     <string name="solver_pyra3_title" translatable="false">Pyraminx Solver</string>
@@ -193,6 +203,7 @@
     <string name="solver_skew2_title" translatable="false">Skewb Solver</string>
     <string name="solver_jing2_title" translatable="false">Jing Pyraminx Solver</string>
     <string name="solver_dino6_title" translatable="false">6-color Dino Solver</string>
+    <string name="solver_dino4_title" translatable="false">4-color Dino Solver</string>
     <string name="solver_pdia_title" translatable="false">Pyraminx Diamond Solver</string>
 
     <string name="solver_cube3_description">A near-perfect, instantaneous, two-phase 3x3x3 solver.\nAuthor: Herbert Kociemba.</string>
@@ -204,7 +215,8 @@
     <string name="solver_cube2_description">A perfect, instantaneous solver.\nAuthor: Leszek Koltunski.</string>
     <string name="solver_skew2_description">A perfect, instantaneous solver.\nAuthor: Leszek Koltunski.</string>
     <string name="solver_jing2_description">A perfect, instantaneous solver.\nAuthor: Leszek Koltunski.</string>
-    <string name="solver_dino6_description">Not implemented yet.\nAuthor: Leszek Koltunski.</string>
+    <string name="solver_dino6_description">A perfect, instantaneous solver.\nAuthor: Leszek Koltunski.</string>
+    <string name="solver_dino4_description">A perfect, instantaneous solver.\nAuthor: Leszek Koltunski.</string>
     <string name="solver_pdia_description">Not implemented yet.\nAuthor: Leszek Koltunski.</string>
 
     <string name="email_address" translatable="false">app.magic.cube@gmail.com</string>
