Example #1
0
 private void buttonColor_MouseClick(object sender, MouseEventArgs e)
 {
     ColorDialog diag = new ColorDialog();
     diag.ShowDialog();
     Color col = diag.Color;
     _matColor = new Microsoft.Xna.Framework.Graphics.Color(col.R, col.G, col.B, trackBarAlpha.Value);
 }
Example #2
0
        public MenuItem(String _text, Vector2 _position, Microsoft.Xna.Framework.Graphics.Color _color)
        {
            text     = _text;
            position = _position;

            color = _color;
        }
Example #3
0
        /// <summary>
        /// Event handler updates the spinning triangle control when
        /// one of the three vertex color combo boxes is altered.
        /// </summary>
        void vertexColor_SelectedIndexChanged(object sender, System.EventArgs e)
        {
            // Which vertex was changed?
            int vertexIndex;

            if (sender == vertexColor1)
                vertexIndex = 0;
            else if (sender == vertexColor2)
                vertexIndex = 1;
            else if (sender == vertexColor3)
                vertexIndex = 2;
            else
                return;

            // Which color was selected?
            ComboBox combo = (ComboBox)sender;

            string colorName = combo.SelectedItem.ToString();

            GdiColor gdiColor = GdiColor.FromName(colorName);

            XnaColor xnaColor = new XnaColor(gdiColor.R, gdiColor.G, gdiColor.B);

            // Update the spinning triangle control with the new color.
            spinningTriangleControl.Vertices[vertexIndex].Color = xnaColor;
        }
Example #4
0
        private void SetProperty(string propName, string value, bool bThrowIfDoesntExist)
        {
            PropertyInfo pi = this.GetType().GetProperty(propName);
            if (pi != null)
            {
                this.GetType().GetProperty(propName).SetValue(this, value, null);
                return;
            }
            FieldInfo fi = this.GetType().GetField(propName);
            if (fi != null)
            {
                if (fi.FieldType.UnderlyingSystemType == typeof(Int32))
                {
                    fi.SetValue(this, (object)Int32.Parse(value));
                }
                else if (fi.FieldType.UnderlyingSystemType == typeof(string))
                {
                    fi.SetValue(this, value);
                }
                else if (fi.FieldType.UnderlyingSystemType == typeof(Microsoft.Xna.Framework.Graphics.Color))
                {
                    // Special handler for colors. Convert color "name" to static property on the XNA color object.
                    PropertyInfo si = new Microsoft.Xna.Framework.Graphics.Color().GetType().GetProperty(value);
                    fi.SetValue(this, si.GetValue(null, null)); // Access static properties.
                }
                else if (fi.FieldType.UnderlyingSystemType.IsSubclassOf(typeof(Enum)))
                {
                    // Enums items are actually fields...
                    Type enumType = fi.FieldType.UnderlyingSystemType;
                    FieldInfo enumInfo = enumType.GetField(value);

                    // Get value of enum
                    object enumValue = enumInfo.GetValue(fi.FieldType.UnderlyingSystemType);

                    //object newEnumValue = Enum.ToObject( enumType, enumValue );
                    fi.SetValue(this, enumValue); //newEnumValue );
                }
                else if (fi.FieldType.UnderlyingSystemType is Type)
                {
                    Assembly asm = Assembly.LoadFrom("GameEditor.xgc.dll"); // TODO - Use passed in name.
                    fi.SetValue( this, asm.GetType(value));

                }
                else
                {
                    throw new Exceptions.CompileException("Unsupported type for value " + propName + " with type of " + fi.FieldType);
                }
                return;
            }
            else
            {
                if (bThrowIfDoesntExist)
                {
                    throw new xgc3.Exceptions.RuntimeEnvException("Unknown property: " + this.GetType().ToString() + "." + propName + "  -- Check capitalization.");
                }
            }
        }
Example #5
0
 /// <summary>
 /// change color of the dwell indicator
 /// </summary>
 /// <param name="color">Microsoft.Xna.Framework.Graphics.Color</param>
 public void SetFeedbackColor(Microsoft.Xna.Framework.Graphics.Color color)
 {
     System.Windows.Media.Color col = new System.Windows.Media.Color();
     col.A = color.A;
     col.B = color.B;
     col.G = color.G;
     col.R = color.R;
     TecClient.CurrentApplicationProfile.FeedbackSettings.DwellFeedbackColor = col;
     TecClient.UpdateApplicationProfile();
 }
Example #6
0
        public Crosshair()
        {
            mCrossHair = new Line[2];

            mCrossHair[0] = ShapeManager.AddLine();
            mCrossHair[1] = ShapeManager.AddLine();
            mCrossHair[1].RotationZ = (float)Math.PI / 2.0f;

            mCrossHair[0].ScaleBy(0.25F);
            mCrossHair[1].ScaleBy(0.25F);

            mCrossHair[0].AttachTo(this, true);
            mCrossHair[1].AttachTo(this, true);
            SpriteManager.AddPositionedObject(this);

            mColor = Color.White;
            mCrossHair[0].Color = mColor;
            mCrossHair[1].Color = mColor;
        }
Example #7
0
        public Crosshair()
        {
            mCrossHair = new Line[2];

            mCrossHair[0]           = ShapeManager.AddLine();
            mCrossHair[1]           = ShapeManager.AddLine();
            mCrossHair[1].RotationZ = (float)Math.PI / 2.0f;

            mCrossHair[0].ScaleBy(0.25F);
            mCrossHair[1].ScaleBy(0.25F);

            mCrossHair[0].AttachTo(this, true);
            mCrossHair[1].AttachTo(this, true);
            SpriteManager.AddPositionedObject(this);

            mColor = Color.White;
            mCrossHair[0].Color = mColor;
            mCrossHair[1].Color = mColor;
        }
Example #8
0
        public static Color TweenValues(Color startColour, Color endColour, int runningTime, int startTime, int endTime,
                                        EasingTypes easing)
        {
            if (startColour == endColour)
            {
                return(startColour);
            }

            int current  = runningTime - startTime;
            int duration = endTime - startTime;

            if (duration == 0 || current == 0)
            {
                return(startColour);
            }

            return(new Color(
                       (byte)Math.Max(0, Math.Min(255, ApplyEasing(easing, current, startColour.R, endColour.R - startColour.R, duration))),
                       (byte)Math.Max(0, Math.Min(255, ApplyEasing(easing, current, startColour.G, endColour.G - startColour.G, duration))),
                       (byte)Math.Max(0, Math.Min(255, ApplyEasing(easing, current, startColour.B, endColour.B - startColour.B, duration))),
                       (byte)Math.Max(0, Math.Min(255, ApplyEasing(easing, current, startColour.A, endColour.A - startColour.A, duration)))));
        }
 public static System.Drawing.Color ConvertColor(Microsoft.Xna.Framework.Graphics.Color clr)
 {
     return(System.Drawing.Color.FromArgb(clr.A, clr.R, clr.G, clr.B));
 }
Example #10
0
 public GraphicElts(Textures texture, Point position, Microsoft.Xna.Framework.Graphics.Color couleurXNA)
 {
     this.texture  = texture;
     this.position = position;
     this.couleur  = new Color(couleurXNA.R, couleurXNA.G, couleurXNA.B, couleurXNA.A);
 }
Example #11
0
 internal static Color CMix(Color c1, Color c2)
 {
     return(new Color((byte)(c1.R * c2.R / 255), (byte)(c1.G * c2.G / 255),
                      (byte)(c1.B * c2.B / 255), (byte)(c1.A * c2.A / 255)));
 }
Example #12
0
 internal static System.Drawing.Color CConvert(Color c)
 {
     return(System.Drawing.Color.FromArgb(c.A, c.R, c.G, c.B));
 }
Example #13
0
        internal pBrowser(string url, Vector2 startPosition, Vector2 dimensions, float drawDepth, Color colour)
            : base(null, Fields.TopLeft, Origins.TopLeft, Clocks.Game, startPosition, drawDepth, true, colour)
        {
            ScaleToWindowRatio = false;

            wb = new WebBrowser();
            wb.ScriptErrorsSuppressed = true;
            wb.ScrollBarsEnabled      = false;
            wb.Width   = (int)(dimensions.X);
            wb.Height  = (int)(dimensions.Y);
            Width      = (int)(dimensions.X);
            Height     = (int)(dimensions.Y);
            DrawWidth  = Width;
            DrawHeight = Height;

            ExactCoordinates = true;

            wb.ProgressChanged += wb_ProgressChanged;

            Load(url);
        }
        public static Color[] GetColorArray()
        {
			Color a = new Color(){PackedValue = 0};
			Color b = new Color(){PackedValue = 4279966491};
			
			Color[] colors = new Color[]
			{
			a
			,a,a,b,a,a,a,a,a,a,a,a,b,b,a,a,a,a,a,a,a,a,a,a,b,b,b,b,b,a,a,a,a,a,a,a,a,b,a,a,a,a,a,a,a,a,a,a,b,a,a,a,a,a,a,a,a,a,a,a,b,a,a,a,a,a,a,a,a,b,b,a,a,a,a,a,a,a,a,b,a,b,a,a,a,a,a,a,b,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,a,a,a,a,b,a,a,a,a,a,a,a,b,b,a,a,a,a,a,a,a,b,a,b,a
			,a,a,a,a,a,b,b,a,a,a,a,a,a,a,b,a,b,a,a,a,a,a,b,b,b,b,a,a,a,a,a,a,a,b,b,a,a,a,b,a,a,a,a,a,a,b,a,a,a,b,a,b,a,a,a,a,a,a,a,a,b,a,b,a,a,a,a,b,b,b,a,a,a,a,a,b,a,a,a,a,a,a,a,a,a,b,a,a,a,a,a,a,b,b,a,a,a,a,a,a,b,a,b,a,a,a,a,b,a,a,a,a,a,a,a,a,a,b,a,a,a,a,a,a,b,a,a,a
			,a,b,a,a,a,a,a,a,a,a,b,a,a,b,a,a,a,a,a,a,a,b,b,a,a,a,a,a,b,a,a,a,a,a,a,b,a,b,a,a,a,a,a,a,a,a,a,a,b,a,a,a,a,a,a,a,a,a,b,a,a,a,a,a,a,a,a,b,a,a,b,a,a,a,a,a,a,b,a,b,a,a,a,a,a,a,a,b,b,b,a,a,a,a,a,a,a,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,a,a,b,a,a,b,a,a,a,a,a,b,a,b,a,a
			,a,a,a,a,b,a,a,b,a,a,a,a,a,a,b,b,b,a,a,a,a,b,a,a,a,a,b,a,a,a,a,a,b,a,a,b,a,a,b,a,a,a,a,a,b,a,a,a,a,b,b,b,a,a,a,a,a,a,a,b,a,b,a,a,a,a,b,a,a,a,b,a,a,a,a,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,a,b,a,a,b,a,a,a,a,b,a,b,a,a,a,a,a,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,a,b,a,a,a,a
			,a,b,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,b,a,a,a,a,a,a,a,a,b,a,a,a,a,a,b,a,b,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a
			,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,b,a,a,a,a,a,a,b,a,a,a,a,a,a,a,a,a,a,b,a,a,a,a,b,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,b,a,a,a,a,a,b,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a
			,a,a,a,a,a,b,a,a,a,a,a,b,a,a,a,a,a,b,a,a,b,a,a,b,b,b,a,b,a,a,b,a,a,a,a,b,a,b,a,a,a,a,a,a,a,a,a,a,b,a,a,a,a,a,a,a,a,a,b,a,a,a,a,a,a,a,a,a,b,a,a,a,a,a,a,a,a,a,b,a,a,a,a,a,a,a,a,a,b,a,a,a,a,a,a,a,b,b,b,b,a,a,a,a,a,b,b,b,b,a,a,a,a,a,b,b,b,b,a,a,a,a,a,b,b,b,b,a
			,a,a,a,a,b,b,b,b,a,a,a,a,a,b,b,b,b,a,a,a,b,a,a,a,a,a,a,a,a,a,a,a,a,b,a,a,a,a,b,a,a,a,b,a,a,a,a,a,a,b,b,b,b,a,a,a,a,a,b,b,b,b,a,a,a,b,a,a,a,a,a,a,a,b,b,b,b,b,b,b,a,b,b,b,b,b,b,b,a,b,b,b,b,b,b,b,a,b,a,a,a,a,a,b,a,b,a,a,a,a,a,b,a,b,a,a,a,a,a,b,a,b,a,a,a,b,a,a
			,b,b,a,b,a,b,a,a,a,a,b,a,b,a,a,a,a,b,a,b,a,a,b,a,a,a,b,b,a,a,b,a,a,a,b,a,a,a,b,a,a,a,a,a,a,a,a,b,a,b,a,a,a,a,a,a,a,b,a,b,a,a,a,a,a,a,a,b,a,b,a,a,a,a,a,a,a,b,a,b,a,a,a,a,a,a,a,b,a,b,a,a,a,a,a,b,a,a,a,a,b,a,a,a,b,a,a,a,a,b,a,a,a,b,a,a,a,a,b,a,a,a,b,a,a,a,a,b
			,a,a,a,b,a,a,a,a,b,a,a,a,b,a,a,a,a,b,a,a,b,a,a,a,a,a,a,a,a,a,a,a,a,b,a,a,a,a,b,a,a,b,a,a,a,a,a,a,b,a,a,a,a,b,a,a,a,b,a,a,a,a,b,a,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,a,a,b,b,a,a,a,a,b,a,b,a,a,a,a,a,b,a,b,a,a,a,a,a,b,a,b,a,a,a,b,a,b
			,a,a,b,b,a,a,b,a,a,a,b,a,b,a,a,a,b,a,a,b,a,b,a,a,a,a,a,b,a,a,b,a,a,a,b,a,a,a,b,a,a,a,a,a,a,a,a,b,a,b,a,a,a,a,a,a,a,b,a,b,a,a,a,a,a,a,a,b,a,b,a,a,a,a,a,a,a,b,a,b,a,a,a,a,a,a,a,b,a,b,a,a,a,a,b,a,a,a,a,a,a,b,a,b,a,a,a,a,a,a,b,a,b,a,a,a,a,a,a,b,a,b,a,a,a,a,a,a
			,b,a,b,a,a,a,a,a,a,b,a,b,a,a,a,a,a,a,b,a,b,a,a,a,b,b,b,b,a,a,a,a,a,b,a,a,a,a,b,a,b,b,a,a,a,a,a,b,a,a,a,a,a,a,b,a,b,a,a,a,a,a,a,b,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,a,a,b,a,b,a,a,a,b,a,b,a,a,a,a,a,b,a,b,a,a,a,a,a,b,a,a,b,a,b,a,a,b
			,a,a,a,b,a,a,b,a,a,a,b,a,b,a,a,a,b,a,a,b,a,b,a,a,a,a,b,a,a,a,b,a,a,b,b,b,b,b,b,b,a,a,a,a,a,a,a,b,a,b,a,a,a,a,a,a,a,b,a,b,a,a,a,a,a,a,a,b,a,b,a,a,a,a,a,a,a,b,a,b,a,a,a,a,a,a,a,b,a,b,a,a,a,a,b,a,a,a,a,a,a,b,a,b,a,a,a,a,a,a,b,a,b,a,a,a,a,a,a,b,a,b,a,a,a,a,a,a
			,b,a,b,a,a,a,a,a,a,a,a,b,a,a,a,a,a,a,a,a,b,a,a,a,a,a,a,b,a,a,a,a,a,b,a,a,a,a,b,b,a,a,b,a,a,a,a,b,a,a,a,a,a,a,b,a,b,a,a,a,a,a,a,b,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,a,a,b,a,b,a,a,a,b,a,b,a,a,a,a,a,b,a,b,a,a,a,a,a,b,a,a,b,a,b,a,a,b
			,a,a,a,b,a,a,b,a,a,a,b,a,b,a,a,a,b,a,a,b,a,b,a,a,a,a,b,a,a,b,a,a,a,b,a,a,a,a,a,b,a,a,a,a,a,a,b,a,a,a,b,a,a,a,a,a,b,a,a,a,b,a,a,a,a,a,b,a,a,a,b,a,a,a,a,a,b,a,a,a,b,a,a,a,a,a,b,a,a,a,b,a,a,a,b,a,a,a,a,a,a,b,a,b,a,a,a,a,a,a,b,a,b,a,a,a,a,a,a,b,a,b,a,a,a,a,a,a
			,b,a,b,a,a,a,a,a,a,a,a,b,a,a,a,a,a,a,a,a,b,a,a,a,a,a,a,b,a,a,a,a,a,b,a,a,a,a,b,a,a,a,a,b,a,a,a,b,a,a,a,a,a,a,b,a,b,a,a,a,a,a,a,b,a,b,a,a,a,a,a,b,a,b,b,b,b,b,b,b,a,b,b,b,b,b,b,b,a,b,b,b,b,b,b,b,a,b,a,a,b,a,a,b,a,b,a,a,a,a,a,b,a,b,a,a,a,a,a,b,a,a,b,a,b,a,a,b
			,a,a,a,b,a,a,a,b,a,b,a,a,a,b,a,b,a,a,a,b,a,b,a,a,a,b,b,a,a,b,a,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,b,a,a,a,b,a,a,a,a,a,b,a,a,a,b,a,a,a,a,a,b,a,a,a,b,a,a,a,a,a,b,a,a,a,b,a,a,a,a,a,b,a,a,a,b,a,a,a,b,a,a,a,a,a,a,b,a,b,a,a,a,a,a,a,b,a,b,a,a,a,a,a,a,b,a,b,a,a,a,a,a,a
			,b,a,b,a,a,a,b,b,b,b,a,b,a,a,a,b,b,b,b,a,a,b,a,a,a,a,b,a,a,a,a,a,a,b,a,a,a,a,b,a,a,a,a,a,b,a,a,b,a,a,a,a,a,a,b,a,b,a,a,a,a,a,a,b,a,a,b,a,a,a,b,a,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,a,a,b,a,a,b,a,a,b,a,b,a,a,a,a,a,b,a,b,a,a,a,a,a,b,a,a,a,b,a,a,a,b
			,a,a,b,b,a,a,a,b,a,b,a,a,a,b,a,b,a,a,a,b,a,a,b,b,b,a,b,b,b,a,a,a,b,a,a,a,a,a,a,a,b,a,a,a,a,b,b,b,b,b,b,b,a,a,a,b,b,b,b,b,b,b,a,a,a,b,b,b,b,b,b,b,a,a,a,b,b,b,b,b,b,b,a,a,a,b,b,b,b,b,b,b,a,a,b,a,a,a,a,a,a,b,a,b,a,a,a,a,a,a,b,a,b,a,a,a,a,a,a,b,a,b,a,a,a,a,a,a
			,b,a,b,a,a,a,a,a,a,b,a,b,a,a,a,a,a,a,b,a,a,a,b,b,b,b,a,a,a,a,a,a,a,b,a,a,a,a,b,a,a,a,a,a,a,b,a,b,a,a,a,a,a,a,b,a,b,a,a,a,a,a,a,b,a,a,a,b,b,b,a,a,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,a,a,b,a,a,a,b,a,b,a,b,a,a,a,a,a,b,a,b,a,a,a,a,a,b,a,a,a,b,a,a,a,a
			,b,b,a,b,a,a,a,b,a,b,a,a,a,b,a,b,a,a,a,a,b,a,a,a,a,a,a,a,a,a,b,a,a,a,a,a,a,a,a,a,b,a,a,a,a,b,a,a,a,a,a,b,a,a,a,b,a,a,a,a,a,b,a,a,a,b,a,a,a,a,a,b,a,a,a,b,a,a,a,a,a,b,a,a,a,b,a,a,a,a,a,b,a,a,b,a,a,a,a,a,a,b,a,b,a,a,a,a,a,a,b,a,b,a,a,a,a,a,a,b,a,b,a,a,a,a,a,a
			,b,a,b,a,a,a,a,a,a,b,a,b,a,a,a,a,a,a,b,a,a,a,a,a,b,a,a,a,a,b,a,a,a,b,a,a,a,a,a,a,a,a,a,a,a,a,a,b,a,a,a,a,a,a,b,a,b,a,a,a,a,a,a,b,a,a,a,a,b,a,a,a,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,a,a,b,a,a,a,b,a,b,a,b,a,a,a,a,a,b,a,b,a,a,a,a,a,b,a,a,a,b,a,a,a,a
			,a,a,a,b,a,a,a,a,b,a,a,a,a,a,b,a,a,a,a,a,a,b,a,a,a,a,a,a,b,b,a,a,a,a,a,a,a,a,a,a,b,a,a,a,b,a,a,a,a,a,a,a,b,a,b,a,a,a,a,a,a,a,b,a,b,a,a,a,a,a,a,a,b,a,b,a,a,a,a,a,a,a,b,a,b,a,a,a,a,a,a,a,b,a,a,b,a,a,a,a,b,a,a,a,b,a,a,a,a,b,a,a,a,b,a,a,a,a,b,a,a,a,b,a,a,a,a,b
			,a,a,a,b,a,a,a,a,b,a,a,a,b,a,a,a,a,b,a,a,a,a,a,a,a,b,a,a,a,b,a,a,a,b,a,a,a,a,a,a,a,a,b,b,a,a,a,a,b,a,a,a,a,b,a,a,a,b,a,a,a,a,b,a,a,a,a,a,a,b,a,a,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,a,a,b,a,a,a,a,b,b,a,a,b,a,a,a,b,a,a,a,b,a,a,a,b,a,a,a,a,b,a,a,a,b
			,a,a,a,b,a,a,a,a,b,a,a,a,a,a,b,a,a,a,a,a,a,a,b,b,b,b,b,b,a,a,a,a,a,a,a,a,a,a,a,a,a,b,b,a,b,a,a,a,a,a,a,a,b,a,b,a,a,a,a,a,a,a,b,a,b,a,a,a,a,a,a,a,b,a,b,a,a,a,a,a,a,a,b,a,b,a,a,a,a,a,a,a,b,a,a,a,b,b,b,b,a,a,a,a,a,b,b,b,b,a,a,a,a,a,b,b,b,b,a,a,a,a,a,b,b,b,b,a
			,a,a,a,a,b,b,b,b,a,a,a,a,a,b,b,b,b,a,a,a,a,a,a,b,b,b,a,a,a,a,b,b,b,a,a,a,a,a,a,a,a,a,a,b,a,a,a,a,a,b,b,b,b,a,a,a,a,a,b,b,b,b,a,a,a,a,a,b,b,b,a,a,a,b,b,b,b,b,b,b,a,b,b,b,b,b,b,b,a,b,b,b,b,b,b,b,a,b,a,a,a,a,a,b,a,a,a,b,b,b,a,a,a,a,a,b,b,b,a,a,a,b,b,a,a,a,a,a
			,b,b,b,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a
			,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a
			,a,a,a,a,a,a,a,a,a,a,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,a,b,b,a,a,a,a,a,b,a,a,b,a,a,a,b,a,a,b,a,a,a,a,b,a,b,a,a,a,a,b,b,b,b,b,b,b,a,a,a,b,a,a,b,a,a,a,a,a,b,b,a,a,a,a,a,a,a,b,a,a,a,b,a,a,a,a,a,b,a,a,a,b,a,a,b,a,a,a,a,a,a,b,a,a,a,b,b,b,b,b,b,a,a,a,b,a,a,b,a,a,a,a
			,a,a,a,b,a,a,a,a,a,a,b,b,a,a,a,a,b,b,b,b,b,a,a,a,a,b,a,a,b,a,a,b,b,b,b,b,b,b,a,a,a,b,a,a,b,a,a,a,a,a,b,a,b,a,a,a,a,b,a,b,a,a,a,a,a,b,b,b,a,a,a,a,a,a,b,a,b,a,a,b,a,a,a,a,a,b,a,a,a,a,b,b,a,a,a,a,a,a,a,b,a,a,a,a,a,b,a,a,b,a,a,a,a,a,a,b,a,a,a,a,b,b,a,a,a,b,a,a
			,a,a,b,b,a,a,a,a,a,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,a,b,a,a,b,a,a,a,a,a,b,b,a,a,a,a,a,b,b,a,a,a,a,a,b,b,b,a,a,a,a,b,a,a,a,a,a,a,a,a,a,a,b,b,a,a,a,a,a,b,a,a,b,a,a,a,a,a,b,a,a,a,a,b,b,a,a,a,a,b,a,a,a,a,b,b,a,a,a,a,a,a,b,a,a,a,a,b,a,a,a,a,a,b,a,a,a,b,b,a,a,a,a,a
			,a,a,b,a,a,a,a,a,a,b,a,a,b,a,a,b,a,a,a,a,a,b,a,a,a,a,b,b,a,a,a,a,a,a,b,a,a,a,a,a,a,a,b,b,a,a,a,a,a,b,a,b,a,a,a,a,a,b,b,b,a,a,a,a,a,b,a,b,a,a,a,a,a,b,a,b,a,a,a,b,a,a,a,a,a,b,a,a,a,b,a,a,b,a,a,a,a,a,b,a,a,a,a,a,a,a,b,b,a,a,a,a,a,a,a,b,a,a,a,b,a,a,b,a,a,b,a,a
			,a,b,a,a,b,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,b,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,b,a,b,a,a,a,b,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,b,a,a,a,a,a,b,a,a,a,a,a,a,a,a,a,a
			,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,b,a,a,a,a,a,b,a,a,a,a,a,a,a,a,a,a,a,a,b,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,b,b,b,a,a,a,a,a,a,a,a,a,a,a,b,a,a,a,a,a,b,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,b,a,a,a,a,a,a,a,a,a,b,a,a
			,a,a,a,a,a,a,a,b,a,a,a,a,a,b,a,a,a,b,b,b,a,a,a,a,a,b,b,b,a,a,a,a,a,b,b,b,a,a,a,b,b,b,b,b,a,a,a,b,b,b,b,b,b,b,a,b,a,a,a,a,a,a,a,b,b,b,b,b,b,b,a,b,a,a,a,a,a,b,a,b,a,a,a,a,a,b,a,b,a,b,a,a,a,b,a,b,a,a,a,a,a,b,a,b,b,b,b,b,b,a,a,b,a,a,a,a,a,b,a,b,b,b,b,b,b,a,a,a
			,b,b,b,b,b,a,a,a,b,b,b,b,b,a,a,b,a,a,a,a,a,a,a,a,b,b,b,b,b,a,a,a,a,a,b,a,a,a,a,b,b,b,b,b,b,b,a,b,a,a,a,a,a,b,a,b,a,a,a,a,a,b,a,b,a,a,a,a,a,b,a,b,a,a,a,a,a,b,a,b,a,a,a,a,a,b,a,b,a,a,a,a,a,b,a,a,b,b,b,b,b,b,a,a,b,b,b,b,b,b,a,a,a,b,b,b,a,a,a,a,b,a,a,a,a,b,a,b
			,a,a,a,a,a,b,a,a,b,a,a,a,b,a,a,a,b,a,a,a,b,a,a,a,b,a,a,a,b,a,a,a,b,a,a,a,b,a,a,b,a,a,a,a,b,a,a,b,a,a,a,a,a,a,a,b,b,b,b,b,b,b,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,b,a,b,b,a,a,a,a,b,a,b,a,a,b,a,a,b,a,b,b,a,a,a,a,b,a,b,a,a,a,a,a,b,a,b,a,a,a,a,a,b,a,b,a,a,a,a,a,b,a,b
			,a,a,a,a,a,b,a,b,a,a,a,a,a,b,a,a,b,b,b,a,a,a,a,b,a,a,a,a,a,b,a,a,a,a,b,a,a,a,a,a,a,a,b,a,a,a,a,b,a,a,a,a,a,b,a,b,a,a,a,a,a,b,a,b,a,a,a,a,a,b,a,b,a,a,a,a,a,b,a,b,a,a,a,a,a,b,a,a,b,a,a,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,a,a,b,a,a,a,b,a,b,a,b,a,a,a,b,a,a,a,a,b,a,b
			,a,a,a,a,a,b,a,a,b,a,a,a,b,a,a,b,a,a,a,a,a,b,a,b,a,a,a,a,a,b,a,b,a,a,a,a,a,b,a,b,a,a,a,a,a,b,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,b,a,b,a,b,a,a,a,b,a,b,a,a,b,a,a,b,a,b,a,b,a,a,a,b,a,b,a,a,a,a,a,b,a,b,b,b,b,b,b,a,a,b,a,a,a,a,a,b,a,b
			,a,a,a,a,a,b,a,b,a,a,a,a,a,b,a,a,a,a,a,b,b,a,a,b,a,a,a,a,a,b,a,a,a,a,b,a,a,a,a,a,a,a,b,a,a,a,a,b,a,a,a,a,a,b,a,b,a,a,a,a,a,b,a,b,a,a,a,a,a,b,a,b,a,a,a,a,a,b,a,b,a,a,a,a,a,b,a,a,b,a,a,a,b,a,a,a,a,a,a,b,a,a,a,a,a,a,a,b,a,a,a,b,a,a,b,a,a,a,a,a,b,a,a,a,a,b,a,b
			,a,a,a,a,a,b,a,a,a,b,a,b,a,a,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,b,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,b,a,b,a,b,a,a,a,b,a,b,a,a,a,b,a,b,a,b,a,b,a,a,a,b,a,b,a,a,a,a,a,b,a,b,a,a,a,b,a,a,a,b,a,a,a,a,a,b,a,b
			,a,a,a,a,a,a,a,b,a,a,a,a,a,a,a,a,a,a,a,a,a,b,a,b,a,a,a,a,a,a,a,a,a,a,b,a,a,a,a,a,a,a,b,a,a,a,a,b,a,a,a,a,a,b,a,b,a,a,a,a,a,b,a,b,a,a,a,a,a,b,a,b,a,a,a,a,a,b,a,b,a,a,a,a,a,b,a,a,a,b,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,a,a,b,a,a,a,b,a,b,a,a,a,a,a,a,b,a,a,a,a,b,a,b
			,a,a,a,a,a,b,a,a,a,b,a,b,a,a,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,b,a,b,b,b,b,b,b,b,a,b,a,a,a,a,a,a,a,b,b,b,b,b,b,b,a,b,b,b,b,b,b,b,a,b,a,a,b,a,a,b,a,b,a,a,a,b,a,b,a,b,a,a,b,a,a,b,a,b,a,a,a,a,a,b,a,b,a,a,a,a,b,a,a,b,a,a,a,a,a,b,a,a
			,b,b,b,a,a,a,a,a,b,b,b,a,a,a,a,b,a,a,a,a,a,b,a,a,b,b,b,a,a,a,a,a,a,a,b,a,a,a,a,a,a,a,b,a,a,a,a,b,a,a,a,a,a,b,a,b,a,a,a,a,a,b,a,b,a,a,a,a,a,b,a,b,a,a,a,a,a,b,a,b,a,a,a,a,a,b,a,a,a,b,a,b,a,a,a,a,a,a,b,a,a,a,a,a,a,a,b,a,a,a,a,b,a,b,a,a,b,a,a,a,b,a,a,a,a,b,a,b
			,a,a,a,a,a,b,a,a,a,a,b,a,a,a,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,b,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,b,a,b,a,a,b,a,a,b,a,b,a,a,a,a,b,b,a,b,a,a,b,a,a,b,a,b,b,b,b,b,b,a,a,b,a,a,a,a,b,a,a,b,b,b,b,b,b,a,a,a
			,a,a,a,b,b,a,a,a,a,a,a,b,b,a,a,b,a,a,a,a,a,b,a,a,a,a,a,b,b,a,a,a,a,a,b,a,a,a,a,a,a,a,b,a,a,a,a,b,a,a,a,a,a,b,a,b,a,a,a,a,a,b,a,b,a,a,a,a,a,b,a,b,a,a,a,a,a,b,a,a,b,a,a,a,b,a,a,a,a,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,a,a,b,a,a,a,a,b,b,b,a,b,a,a,a,a,b,a,a,a,a,b,a,b
			,a,a,a,a,a,b,a,a,a,a,b,a,a,a,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,b,a,b,a,a,a,a,a,a,a,b,b,b,b,b,b,b,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,b,a,b,a,a,a,b,a,b,a,b,a,a,a,a,a,b,a,b,a,a,a,b,a,b,a,b,a,a,a,b,a,a,a,b,a,a,a,a,a,b,a,b,a,a,a,b,a,a,a,a
			,a,a,a,a,a,b,a,a,a,a,a,a,a,b,a,a,b,b,b,b,b,a,a,a,a,a,a,a,a,b,a,a,a,a,b,a,a,a,a,a,a,a,b,a,a,a,a,b,a,a,a,a,a,b,a,b,a,a,a,a,a,b,a,b,a,a,a,a,a,b,a,b,a,a,a,a,a,b,a,a,a,b,b,b,a,a,a,a,a,a,b,a,a,a,a,a,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,a,b,b,b,a,a,a,a,a,b,a,a,a,a,b,a,b
			,a,a,a,a,a,b,a,a,a,a,b,a,a,a,a,b,a,a,a,a,a,b,a,b,a,a,a,a,a,b,a,b,a,a,a,a,a,b,a,b,a,a,a,a,a,b,a,b,a,a,a,a,a,a,a,a,a,a,a,b,a,a,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,b,a,b,a,a,a,b,a,b,a,a,a,a,a,a,a,a,a,b,a,a,a,b,a,b,a,b,a,a,a,a,b,a,a,a,a,a,a,a,a,a,a,b,a,a,a,a,b,a,a,b
			,a,a,a,a,a,b,a,b,a,a,a,a,a,b,a,a,a,a,b,a,a,a,a,b,a,a,a,a,a,b,a,a,a,a,a,a,a,a,a,a,a,a,b,a,a,a,a,b,a,a,a,a,a,b,a,b,a,a,a,a,a,b,a,b,a,a,a,a,a,b,a,b,a,a,a,a,a,b,a,a,a,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,a,b,a,a,a,a,a,a,a,b,a,a,a,a,b,a,b
			,a,a,a,a,a,b,a,a,a,a,b,a,a,a,a,a,b,a,a,a,b,a,a,a,b,a,a,a,b,a,a,a,b,a,a,a,b,a,a,b,a,a,a,a,b,a,a,b,a,a,a,a,a,a,a,a,a,a,a,b,a,a,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,b,a,b,a,a,a,a,b,b,a,a,a,a,b,b,a,a,a,b,a,a,a,a,b,b,a,b,a,a,a,a,b,a,a,a,a,a,b,b,a,a,a,b,a,a,a,a,b,a,a,b
			,a,a,a,a,a,b,a,b,a,a,a,a,a,b,a,a,a,a,a,b,a,a,a,b,a,a,a,a,a,b,a,a,a,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,b,a,a,a,b,a,a,a,b,a,a,a,b,a,a,a,b,a,a,a,b,a,a,a,b,a,a,a,b,a,a,a,a,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,a,a,b,a,a,a,a,b,a,a
			,b,a,a,a,b,a,a,a,a,a,b,a,a,a,a,a,a,b,b,b,a,a,a,a,a,b,b,b,a,a,a,a,a,b,b,b,a,a,a,b,b,b,b,b,a,a,a,b,b,b,b,b,b,b,a,a,a,a,a,a,b,b,a,b,b,b,b,b,b,b,a,b,a,a,a,a,a,b,a,b,a,a,a,a,a,b,a,a,a,a,a,b,a,a,a,b,a,a,a,a,a,b,a,b,a,a,a,a,a,b,a,a,a,a,a,b,a,a,a,b,a,a,a,a,a,b,a,a
			,b,b,b,b,b,a,a,a,b,b,b,b,b,a,a,a,a,b,b,b,a,a,a,a,b,b,b,b,b,a,a,a,a,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,a,b,b,b,a,a,a,a,a,b,b,b,a,a,a,a,a,b,b,b,a,a,a,a,a,b,b,b,a,a,a,a,a,a,a,b,b,a,a,a,a,a,b,a,a,a,a,b,b,b,b,b,b,b,a,b,b,b,b,b,b,b,a,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,a,a
			,a,b,b,b,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a
			,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a
			,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,b,b,a,a,a,a,a,b,a,a,a,a,b,a,a,a,a,a,a,a,a,b,b,a,a,a,b,a,a,a,a,a,a,b,a,b,a,a,b,a,a,a,a,a,a,b,a,b,a,b,a,a,b,a,a,a,b,a,b,a,a,a,a,a,b,a,a,a,b,a,b,a,a,a,b,a,b,a,b,a,a,a,a,b,a,a,b,b,a,b,b,a,b,a,a,a,b,a,b,a,a,a,b,a,a,a,a,b,a,b,a,a,a
			,a,a,a,a,b,b,b,a,a,a,a,a,a,a,b,b,b,b,a,a,a,a,a,a,b,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,a,b,b,b,b,a,a,a,a,b,b,b,b,b,b,a,a,a,b,a,b,a,a,a,a,a,b,a,b,a,a,a,a,a,a,b,a,a,a,a,a,a,b,b,b,b,a,a,a,a,a,b,a,a,a,a,a,b,b,b,b,a,a,a,a,a,b,a,b,a,a,a,a,a,a,b,a,a,a,a,a,a,b,b,a,a,a,a
			,a,b,b,a,a,a,a,a,b,b,a,a,a,a,b,a,a,b,a,a,a,b,a,a,a,a,a,b,a,a,a,a,a,a,a,b,a,a,b,a,a,b,a,a,a,a,a,a,b,b,b,a,a,b,a,a,a,a,a,b,a,b,a,a,a,a,a,a,a,a,b,a,a,a,b,a,a,a,a,a,a,a,b,a,a,a,b,a,a,b,b,b,a,b,a,a,a,a,b,a,a,b,a,a,a,b,a,a,b,a,b,a,a,a,a,a,b,a,a,a,a,a,a,a,a,a,a,a
			,a,a,a,a,b,a,b,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,b,b,b,b,a,b,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,b,a,a,b,a,a,a
			,b,a,a,b,a,a,a,b,a,a,b,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,b,a,a,a,a,a,a,a,a,a,a,a,a,a,b,a,a,a,a,a,a,a,a,a,a,a,b,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,b,a,a,a,b,a,a,a,a,a,a,a,b,a,a,a,b,a,a,a,a,a,a,b,a,a,a,a,b,a,a,b,a,a,a,b,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,b,a,a,a,a
			,a,a,a,a,b,b,b,a,a,a,a,a,a,a,a,b,a,a,a,a,a,a,a,b,b,b,b,a,a,a,a,a,b,b,b,b,a,a,a,a,a,b,b,b,b,a,a,a,b,b,b,b,a,b,a,a,b,b,b,b,b,b,b,a,b,a,a,a,a,a,b,a,a,a,b,b,b,a,a,a,b,b,b,b,b,b,b,a,b,b,b,b,b,b,b,a,b,a,a,a,a,a,b,a,b,a,a,a,a,a,b,a,a,b,b,b,b,b,b,a,a,b,a,a,a,a,a,a
			,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,b,a,a,a,b,a,a,a,a,a,a,b,a,a,a,a,a,a,a,b,a,a,a,b,a,b,b,b,a,a,a,a,b,b,a,b,a,b,a,a,a,b,a,a,b,a,a,a,b,a,a,b,a,b,a,a,a,a,a,b,a,a,a,b,a,a,b,a,a,a,b,a,a,a,b,a,a,b,a,a,a,a,b,a,a,b,a,a,a,b,a,a,b,a,b,a,a,b,a,a,b,a,a,a,a,a,b,a,b,a,a,a
			,a,a,a,a,b,a,b,a,a,a,a,a,a,a,b,a,b,a,a,a,a,a,b,a,a,a,a,b,a,a,a,b,a,a,a,a,b,a,a,a,b,a,a,a,a,b,a,a,b,b,b,b,a,b,a,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,b,a,a,b,a,a,a,b,a,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,b,a,a,b,a,a,a,b,a,a,a,a,a,a,a,b,a,a,a,b,b,a,a,a,a,a
			,b,b,a,b,a,a,b,a,a,a,a,a,a,a,a,a,b,a,a,a,b,a,a,a,a,a,a,b,a,a,a,a,a,a,a,b,a,a,a,b,a,b,a,a,b,a,a,b,a,a,b,b,a,b,a,a,b,a,a,a,b,a,a,a,b,a,a,b,a,b,a,a,a,a,a,b,a,a,a,b,a,a,b,a,a,a,b,a,a,a,b,a,a,b,a,a,a,a,b,a,a,b,a,a,a,b,a,a,b,a,b,a,a,b,a,a,b,a,a,a,a,a,b,a,b,a,a,a
			,a,a,a,a,b,a,b,a,a,a,a,a,a,a,b,a,b,a,a,a,a,b,a,a,a,a,a,a,b,a,b,a,a,a,a,a,a,b,a,b,a,a,a,a,a,a,b,a,a,b,b,b,a,b,a,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,b,a,b,a,a,a,a,a,b,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,b,a,a,b,a,a,a,b,a,a,a,a,a,a,b,a,a,a,b,a,a,b,b,a,a,b
			,a,a,b,b,a,a,b,a,a,a,a,a,a,a,a,a,b,a,a,a,b,a,a,a,a,a,a,b,a,a,a,a,a,a,a,a,b,a,b,a,a,b,a,a,a,b,a,b,a,a,a,b,a,b,a,b,a,a,a,a,b,a,a,a,b,a,a,b,a,b,a,a,a,a,a,b,a,a,a,b,a,a,b,a,a,a,b,a,a,a,b,a,a,b,a,a,a,a,b,a,a,b,a,a,a,b,a,a,b,a,b,a,a,b,a,a,b,a,a,a,a,a,b,a,b,a,a,a
			,a,a,a,a,b,a,b,a,a,a,a,a,a,a,b,a,b,a,a,a,a,b,a,a,a,a,a,a,b,a,b,a,a,a,a,a,a,a,a,b,a,a,a,a,a,a,b,a,a,a,a,b,a,b,a,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,b,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,b,a,a,a,b,a,b,a,a,a,a,a,a,a,b,a,a,a,b,a,a,a,b,b,a,b
			,a,a,a,b,a,a,b,a,a,a,a,a,a,a,a,a,b,a,a,a,b,a,a,a,a,a,a,b,a,a,a,a,a,a,a,a,b,a,b,a,a,b,a,a,a,b,a,b,a,a,a,b,a,b,b,b,a,a,a,a,b,a,a,a,b,a,a,b,a,b,a,a,a,a,a,b,a,a,a,b,a,b,a,a,a,a,a,b,a,a,b,a,a,b,a,a,a,a,b,a,a,b,a,a,a,b,a,a,b,a,b,a,a,b,a,a,b,a,a,a,a,b,a,a,a,b,a,a
			,a,a,a,b,a,a,a,b,a,a,a,a,a,b,a,a,a,b,a,a,a,b,a,a,a,a,a,a,b,a,b,a,a,a,a,a,a,a,a,b,a,a,a,a,a,a,b,a,a,a,a,b,a,b,a,a,b,b,b,b,b,b,b,a,b,a,a,a,a,a,b,a,b,a,a,a,a,a,a,a,b,b,b,b,b,b,b,a,b,b,b,b,b,b,b,a,b,a,a,a,a,a,b,a,a,a,b,a,b,a,a,a,a,a,a,b,a,a,a,a,b,b,a,a,a,b,a,b
			,a,a,a,b,a,a,b,a,b,b,a,a,a,a,a,a,b,a,a,a,b,a,a,a,a,a,a,b,a,a,a,a,a,a,a,a,b,a,b,a,a,b,a,a,a,b,a,b,a,a,a,b,a,b,a,a,b,a,a,a,b,a,a,a,b,a,a,b,a,b,a,a,a,a,a,b,a,a,a,b,a,a,b,a,a,a,b,a,a,a,b,a,a,b,a,a,a,a,b,a,a,b,a,a,a,b,a,a,b,a,b,a,a,b,a,a,b,a,a,a,a,b,a,a,a,b,a,a
			,a,a,a,b,a,a,a,b,a,a,a,a,a,b,a,a,a,b,a,a,a,b,a,a,a,a,a,a,b,a,b,a,a,a,b,b,b,b,a,b,a,a,a,a,a,a,b,a,a,a,a,b,a,b,a,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,b,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,b,a,a,a,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,b,b,a,b,b,a,b
			,a,a,a,b,a,a,b,b,a,a,b,a,a,a,a,a,b,a,a,a,b,a,a,a,a,a,a,b,a,a,a,a,a,a,a,a,a,b,a,a,a,b,a,a,b,a,a,b,a,a,b,b,a,b,a,a,b,a,a,a,b,a,a,a,b,a,a,b,a,b,a,a,a,a,a,b,a,a,a,b,a,a,b,a,a,a,b,a,a,a,b,a,a,b,a,a,a,a,b,a,a,b,a,a,a,b,a,a,b,a,b,a,a,b,a,a,b,a,a,a,b,b,b,b,b,b,b,a
			,a,a,b,b,b,b,b,b,b,a,a,a,b,b,b,b,b,b,b,a,a,b,a,a,a,a,a,a,b,a,b,a,a,a,a,a,a,b,a,b,a,a,a,a,a,a,b,a,a,a,a,b,a,b,a,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,b,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,b,a,a,a,a,b,a,a,a,a,a,a,b,a,a,a,a,a,a,a,a,b,a,a,a,b
			,a,a,b,b,a,a,b,a,a,a,b,a,a,a,a,a,b,a,a,a,b,a,a,a,a,a,a,b,b,b,b,b,b,a,a,a,a,b,a,a,a,b,b,b,a,a,a,a,b,b,a,b,a,b,a,a,a,b,a,a,b,a,a,a,b,a,a,b,a,b,a,a,a,a,a,b,a,a,a,b,a,a,b,a,a,a,b,a,a,a,b,a,a,b,a,a,a,a,b,a,a,b,a,a,a,b,a,a,b,a,b,a,a,b,a,a,b,a,a,a,b,a,a,a,a,a,b,a
			,a,a,b,a,a,a,a,a,b,a,a,a,b,a,a,a,a,a,b,a,a,b,a,a,a,a,a,a,b,a,b,a,a,a,a,a,a,b,a,b,a,a,a,a,a,a,b,a,a,a,a,b,a,b,a,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,b,a,b,a,a,a,a,a,b,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,b,a,a,a,a,b,a,a,a,a,a,a,b,a,a,a,a,a,a,a,a,a,b,a,a,a
			,b,b,a,b,a,a,b,a,a,a,b,a,a,a,a,a,b,a,a,a,b,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,b,a,a,a,b,a,a,a,a,a,a,a,a,a,b,a,a,a,a,a,a,a,a,b,a,a,a,a,a,a,b,a,a,b,a,a,a,b,a,a,a,a,b,a,a,b,a,a,a,b,a,a,a,b,a,a,b,a,a,a,a,a,a,a,b,a,a,a,b,a,a,b,a,b,a,a,b,a,a,b,a,a,b,a,a,a,a,a,a,a,b
			,a,b,a,a,a,a,a,a,a,b,a,b,a,a,a,a,a,a,a,b,a,a,b,a,a,a,a,b,a,a,a,b,a,a,a,a,b,a,a,a,b,a,a,a,a,b,a,a,a,a,a,b,a,b,a,a,b,a,a,a,a,a,a,a,a,b,a,a,a,b,a,a,a,b,a,a,a,b,a,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,a,a,a,b,a,a,a,b,a,a,a,a,a,b,a,a,a,a,a,b,a,a,a,a,a,a,b,a,a,a,b,a,a,a
			,a,a,a,b,a,a,b,a,a,a,b,a,a,a,a,a,b,a,a,a,b,a,a,a,a,a,a,a,a,a,b,b,a,a,a,a,a,b,a,a,a,b,a,a,a,a,a,b,a,a,a,b,a,a,a,b,b,a,a,a,b,a,a,a,a,a,a,b,a,a,b,a,a,a,b,a,a,a,a,b,a,a,b,a,a,a,b,a,a,a,b,a,a,b,a,a,a,a,b,b,a,b,a,a,a,b,a,a,b,a,b,a,a,b,a,a,b,a,a,b,a,a,a,a,a,a,a,b
			,a,b,a,a,a,a,a,a,a,b,a,b,a,a,a,a,a,a,a,b,a,a,a,b,b,b,b,a,a,a,a,a,b,b,b,b,a,a,a,a,a,b,b,b,b,a,a,a,a,a,a,b,a,b,a,a,b,b,b,b,b,b,b,a,a,a,b,b,b,a,a,a,a,a,b,b,b,a,a,a,b,b,b,b,b,b,b,a,b,b,b,b,b,b,b,a,a,a,b,b,b,a,a,a,a,a,a,b,a,a,a,a,b,b,b,b,b,b,b,a,a,b,b,b,a,a,a,b
			,a,a,a,b,a,a,b,a,a,a,b,a,a,a,b,b,a,a,a,a,b,b,b,b,b,b,a,a,a,a,a,b,a,a,a,b,b,a,a,a,a,b,a,a,a,a,a,a,b,b,b,a,a,a,a,a,b,a,a,a,b,a,a,a,a,b,b,a,a,a,a,b,a,b,a,a,a,b,b,a,a,a,a,b,a,b,a,a,a,a,b,a,a,b,b,b,a,a,a,b,a,b,b,a,b,b,a,a,b,a,b,a,a,b,b,a,b,a,a,a,a,a,a,a,a,a,a,a
			,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a
			,b,b,b,a,a,a,b,a,a,a,b,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,b,b,b,b,b
			,b,a,a,a,a,a,b,b,b,b,b,b,a,a,a,a,b,a,a,a,a,a,b,a,a,a,a,b,a,a,a,a,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,b,a,a,a,a,a,a,a,b,a,a,b,a,a,a,a,a,b,a,a,a,a,a,a,b,b,a,a,a,a,a,a,a,b,a,a,b,a,a,a,a,b,b,a,a,a,a,a,a,a,b,b,b,b,a,a,a,b,a,a,a,a,a,a,b,a,a,a,b,b,b,b,a,a,a,a,a,a,b,a,a
			,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,b,a,b,a,a,b,a,a,b,a,b,a,a,b,b,b,a,a,a,b,b,b,a,a,a,b,b,b,a,a,b,a,a,a,a,a,b,a,a,a,a,a,b,a,a,a,a,a,a,b,b,b,b,b,b,b,b,a,a,b,a,a,a,a,a,a,a,b,a,a,a,b,b,b,a,a,a,a,b,a,a,a,a,a,b,b,b,a,b,b,b,b,b,a,a,b,b,a,a,a,a,b,a,a,a,a,b,a,a,a,a,a
			,a,b,a,a,a,b,a,a,a,a,a,a,b,a,a,b,b,a,a,a,a,a,b,a,a,a,b,b,a,a,a,a,b,a,a,a,a,a,a,a,b,a,b,a,a,a,a,b,b,a,a,a,a,a,b,b,a,b,b,b,b,b,b,b,b,b,a,a,a,a,b,a,a,b,a,a,a,a,a,a,b,a,a,b,a,a,a,b,a,a,b,a,a,a,a,a,b,a,a,a,a,b,a,a,b,a,a,a,a,a,b,a,a,a,b,a,a,a,a,b,a,a,a,a,a,b,a,a
			,b,a,b,a,a,a,a,b,a,a,a,b,b,b,b,a,a,a,a,a,a,b,a,a,b,a,a,a,b,a,b,a,b,a,a,b,a,b,a,a,a,b,a,b,a,a,b,a,a,a,a,b,a,b,a,a,a,a,b,a,a,a,a,a,b,a,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,a,a,b,a,a,b,a,a,b,a,a,a,a,b,a,a,a,a,b,a,a,a,b,b,a,a,a,a,a,b,a,a,b,a,a,b,a,a,a,a,b,a,a,b,b,b,b
			,a,a,b,a,b,a,a,b,b,b,b,a,a,b,a,a,b,a,a,a,a,b,a,a,a,a,a,b,a,a,a,a,b,a,a,a,a,a,a,a,b,a,b,a,a,a,a,b,b,a,a,a,a,a,b,b,a,a,b,a,a,a,a,a,b,a,a,a,a,a,a,a,a,a,a,a,a,a,a,b,a,a,a,b,a,a,a,b,a,a,b,a,a,a,a,b,a,a,a,a,a,a,b,a,b,a,a,a,a,b,a,a,a,b,a,a,a,a,a,a,b,a,a,a,b,a,a,a
			,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,b,a,a,b,b,b,a,b,a,b,a,b,a,b,a,a,a,a,b,b,b,a,a,a,b,b,b,a,a,a,b,a,a,a,b,a,b,a,a,a,b,a,a,a,a,a,a,b,a,a,b,a,a,a,a,a,a,a,a,b,a,a,a,a,a,b,a,a,a,a,a,b,a,a,a,a,b,a,a,a,a,b,a,a,a,a,a,b,a,a,a,a,a,b,a,a,b,a,a,b,a,a,a,a,b,a,b,a,a,a,a
			,b,a,b,a,b,a,a,b,a,a,a,b,a,b,a,a,b,a,a,a,b,a,a,a,a,a,a,b,a,a,a,b,a,a,a,a,a,a,a,a,b,a,b,a,a,a,a,b,a,b,a,a,a,b,a,b,a,a,b,a,a,a,a,a,b,a,a,b,a,a,a,b,a,a,a,b,a,b,b,b,b,b,b,b,b,a,a,b,a,a,b,a,a,a,a,b,a,a,a,a,a,a,a,a,b,a,a,a,b,a,a,a,a,b,a,a,a,a,a,a,b,a,a,a,b,a,a,b
			,a,a,a,b,a,a,b,b,a,b,a,a,b,a,a,a,a,b,a,a,a,b,a,a,b,a,b,a,b,a,b,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,b,a,a,a,b,a,b,a,a,a,b,a,a,a,a,a,a,b,a,a,b,a,a,a,a,a,a,a,a,b,a,a,a,a,a,b,a,a,a,b,a,a,b,a,a,b,a,a,a,a,a,b,a,a,a,a,a,b,a,a,a,a,a,b,a,a,b,a,b,a,a,a,a,a,b,a,b,a,a,a,a
			,a,a,b,a,b,a,a,b,a,a,a,b,a,b,a,a,b,a,a,a,b,a,a,a,a,a,a,b,a,a,b,a,a,a,a,a,a,a,a,b,a,a,a,b,a,a,a,b,a,b,a,a,a,b,a,b,a,a,b,b,b,b,b,b,b,a,a,b,a,a,a,b,a,a,a,b,a,a,a,b,a,a,b,a,a,a,a,a,b,b,a,a,a,a,a,b,a,a,a,a,a,a,a,a,b,a,a,b,a,a,a,a,a,b,a,a,a,a,a,a,b,a,a,a,b,a,a,b
			,a,a,a,b,a,b,a,a,b,b,a,a,b,a,a,a,a,b,a,a,a,b,a,a,b,a,b,a,b,b,b,a,a,a,a,b,b,b,a,a,b,a,a,a,b,a,a,b,a,a,a,b,a,b,a,a,a,b,a,a,a,a,a,b,a,a,a,b,b,b,b,b,b,a,a,a,a,b,a,a,a,b,a,a,a,a,a,b,b,b,a,a,b,a,a,a,a,a,b,a,a,a,a,a,b,b,b,b,b,a,a,b,b,a,a,b,a,a,a,a,a,b,a,b,a,a,a,a
			,a,a,b,a,b,a,a,b,b,b,b,a,a,b,a,a,a,a,a,b,a,a,a,b,a,a,a,a,a,a,b,a,a,b,b,a,a,a,a,b,a,a,a,b,a,a,a,b,a,a,b,a,b,a,a,b,a,a,b,a,a,a,a,a,b,a,a,a,b,a,b,a,b,a,b,a,a,a,a,b,a,a,b,a,a,a,a,b,b,a,a,a,a,a,a,b,a,a,a,b,b,b,b,a,b,a,b,b,a,a,a,a,a,b,a,a,a,a,a,a,b,a,a,b,a,a,a,a
			,b,a,b,a,a,b,a,a,a,b,a,a,b,a,a,a,a,b,a,a,a,b,a,a,a,a,b,a,a,a,b,b,b,a,b,a,a,a,b,a,b,a,a,a,b,a,a,a,b,a,b,a,a,a,b,a,b,a,a,a,a,a,a,b,a,a,a,b,a,a,a,a,a,a,a,a,a,b,a,a,a,b,a,a,a,a,a,a,a,a,a,b,a,a,a,b,a,a,b,a,a,a,a,a,b,a,a,a,a,a,a,a,a,a,b,a,a,b,b,a,a,b,a,b,a,a,a,a
			,b,a,b,a,b,a,a,b,a,a,b,a,a,b,a,a,a,a,b,a,a,a,b,b,a,a,a,a,a,b,a,a,b,a,a,b,a,a,b,b,b,b,b,b,b,a,a,b,a,a,b,a,b,a,a,b,a,a,b,a,a,a,a,a,b,a,a,a,b,a,b,a,b,a,b,a,a,b,b,b,b,b,b,b,b,a,b,a,a,b,a,a,b,a,a,b,a,a,a,a,a,a,b,a,b,b,a,a,b,a,a,a,a,b,a,a,a,a,a,a,b,a,a,b,a,a,a,a
			,b,a,b,a,a,b,a,a,a,b,a,a,b,a,a,a,a,b,a,a,a,b,a,a,a,a,b,a,a,a,b,a,b,a,a,a,a,a,b,a,b,a,a,a,b,a,a,a,b,a,b,a,a,a,b,a,b,a,a,a,a,a,b,b,b,b,b,b,a,a,a,a,a,a,a,a,a,a,b,a,b,a,a,a,a,a,a,a,a,a,b,a,a,a,b,b,a,a,b,a,a,a,a,a,b,a,a,a,a,a,a,a,a,a,b,a,b,a,a,b,a,b,a,a,b,b,b,b
			,a,a,b,a,b,a,a,b,a,a,a,b,a,b,a,a,a,b,a,a,a,b,a,b,a,a,a,a,b,a,a,a,a,a,b,a,a,a,b,a,a,a,a,a,b,a,a,b,a,a,b,a,b,a,a,b,a,a,b,a,a,a,a,a,b,a,a,a,b,a,b,a,b,a,b,a,a,a,b,a,a,b,a,a,a,a,b,a,a,a,b,a,b,a,a,b,a,a,a,a,a,a,b,a,b,a,a,a,a,b,a,a,a,b,a,a,a,a,a,a,b,a,a,b,a,a,a,a
			,b,a,b,a,a,b,a,a,a,b,a,a,b,a,a,a,a,b,a,a,a,b,a,a,b,a,b,a,b,a,b,a,b,a,a,b,b,b,b,a,b,a,a,a,b,a,a,a,b,a,b,a,a,a,b,a,b,a,a,a,a,a,b,a,a,a,a,b,a,a,a,a,a,a,a,a,a,a,b,a,b,a,a,a,a,a,a,a,a,b,a,a,a,b,a,b,a,a,b,a,a,a,a,a,b,a,a,a,a,a,a,a,a,b,a,a,b,a,a,b,a,a,b,a,a,a,a,a
			,a,b,a,a,a,b,a,a,a,a,a,a,b,a,a,a,a,b,a,a,a,b,b,b,b,a,a,a,b,a,a,a,a,b,a,a,a,b,a,a,a,a,a,a,a,b,a,b,a,a,a,b,a,a,a,b,a,a,b,a,a,a,a,a,b,a,a,a,a,b,a,a,a,b,a,a,a,a,b,a,a,b,a,a,a,a,b,a,a,a,b,b,a,a,a,a,b,a,a,a,a,b,a,a,b,a,a,a,a,a,b,a,a,a,b,a,a,a,a,b,a,a,b,a,a,a,a,a
			,a,b,a,a,a,b,a,a,b,b,a,a,b,a,a,a,a,b,a,a,a,b,b,a,b,a,b,a,b,a,b,a,b,a,b,a,a,a,b,a,b,a,a,a,b,a,a,a,a,b,a,a,a,a,a,b,a,a,a,a,a,b,a,a,a,a,a,b,a,a,a,a,a,a,a,a,a,a,a,b,a,a,a,a,a,a,a,a,a,b,a,a,a,b,b,b,b,a,a,b,a,a,a,b,b,a,a,a,a,a,a,a,a,b,a,a,b,a,a,b,a,a,a,b,b,b,b,b
			,b,a,a,a,a,a,b,b,b,b,b,b,a,a,a,a,b,a,a,a,a,a,a,b,a,a,a,b,a,a,a,a,b,b,b,b,a,b,a,a,a,a,a,a,a,b,a,b,a,a,a,b,a,a,a,b,a,a,b,a,a,a,a,a,b,a,a,a,a,b,a,a,a,b,a,a,a,a,b,a,a,b,a,a,a,a,a,b,b,b,a,a,b,b,a,a,a,b,b,b,b,a,a,a,b,a,a,a,a,a,a,b,a,a,a,b,b,b,b,a,a,a,b,a,a,a,a,a
			,a,b,a,a,a,a,b,b,a,b,a,a,b,a,a,a,a,b,a,a,a,a,a,a,b,a,b,a,a,b,b,b,a,a,b,a,a,b,b,a,b,a,a,a,b,a,a,a,a,b,a,a,a,a,a,b,a,a,a,a,a,b,a,a,a,a,a,b,b,b,b,b,b,a,a,a,a,a,a,b,a,a,a,a,a,a,a,a,b,a,a,a,a,a,a,b,a,a,a,a,b,b,b,a,b,b,b,b,b,a,a,a,b,a,a,a,a,b,b,a,a,a,a,a,a,a,a,a
			,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a
			,a,b,a,a,a,a,a,a,a,b,a,a,b,a,a,a,a,b,a,a,a,a,b,a,b,a,b,a,a,a,b,a,a,a,a,b,b,a,b,a,a,b,b,b,b,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,b,a,a,a
			,a,a,b,a,b,a,a,a,a,a,b,a,b,a,a,a,a,a,b,a,a,b,b,b,b,b,b,a,b,a,a,a,a,a,b,a,b,a,a,a,a,a,a,a,a,a,b,b,b,a,a,a,a,b,b,b,a,a,a,a,a,a,a,a,b,a,b,a,a,b,a,a,a,a,a,a,b,a,a,a,a,a,a,a,b,a,b,b,b,a,a,a,b,b,b,b,b,b,b,a,a,b,b,b,b,a,a,a,b,b,b,b,a,a,a,b,b,b,b,a,a,a,b,b,b,a,a,a
			,a,b,a,a,a,b,a,a,a,b,a,a,b,a,a,a,a,b,a,a,a,a,b,a,b,a,b,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,b,b,b,a,a,a,b,b,b,b,b,a,a,a,b,b,b,b,b,b,b,a,b,a,a,a,a,a,b,a,b,a,a,a,a,a,b,a,b,b,b,b,b,b,a,a,b,b,b,b,b,b,a,a,a,b,b,b,b,b,a,a,b,b,b,b,b,b,b,a,b,a,a,a
			,a,a,b,a,a,b,a,a,a,b,a,a,a,b,a,a,a,b,a,a,a,a,a,a,a,b,a,a,a,b,a,a,a,b,a,a,b,a,a,a,a,a,a,a,a,b,a,a,a,b,a,a,b,a,a,a,b,a,a,a,a,a,a,a,b,a,b,a,a,b,a,a,a,a,a,a,b,a,a,a,a,a,a,a,b,b,a,a,a,b,a,a,a,a,a,b,a,a,a,a,b,a,a,a,a,b,a,b,a,a,a,a,b,a,b,a,a,a,a,b,a,b,a,a,a,b,a,b
			,b,a,a,a,a,a,b,b,b,a,a,a,b,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,b,a,a,a,a,a,a,b,a,b,b,b,b,b,b,a,a,a,b,a,a,a,b,a,a,b,a,a,a,a,b,a,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,b,a,b,b,a,a,a,a,b,a,b,a,a,a,a,a,b,a,b,a,a,a,a,a,b,a,b,a,a,a,a,a,b,a,a,a,a,b,a,a,a,a,b,a,a,a
			,a,a,b,a,a,b,a,a,a,b,a,a,a,b,a,a,a,b,a,a,a,a,a,a,b,a,a,a,a,b,a,a,a,b,a,a,b,b,b,b,b,b,a,a,b,a,a,a,a,b,a,a,a,a,a,a,b,a,a,a,a,a,a,a,b,a,b,a,a,b,a,a,a,a,a,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,b,a,a,a,a,b,a,a,a,a,b,a,a,a,a,b,a,a,a,a,a,a,b,a,a,a,a,a,a,b,a,b,a,a,a,b,a,a
			,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,b,b,b,b,a,b,a,a,b,b,b,b,b,a,a,a,b,a,a,a,a,a,a,b,a,b,a,a,a,a,a,b,a,b,a,a,a,a,a,b,a,b,a,a,a,a,a,b,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,b,a,b,a,b,a,a,a,b,a,b,a,a,a,a,a,b,a,b,a,a,a,a,a,b,a,b,a,a,a,a,a,b,a,a,a,a,b,a,a,a,a,b,a,a,a
			,a,a,b,a,a,a,b,a,b,a,a,a,a,a,b,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,b,a,b,a,a,a,b,a,a,a,a,b,b,a,b,a,a,a,b,a,a,a,a,b,b,b,b,a,a,a,a,b,b,a,b,a,a,a,a,b,a,b,a,a,a,a,a,a,b,a,b,b,a,a,b,a,a,a,a,a,b,a,a,a,a,b,a,a,a,a,b,a,a,a,a,b,a,a,a,a,a,a,b,a,a,a,a,a,a,b,a,a,a,a,a,b,a,a
			,a,b,b,b,b,a,a,a,a,b,b,b,b,b,a,a,a,a,b,a,a,a,a,b,a,a,a,b,a,a,a,a,b,a,a,b,a,a,a,a,a,a,b,a,b,a,a,a,a,a,b,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,b,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,b,a,b,a,b,a,a,a,b,a,b,a,a,a,a,a,b,a,b,a,a,a,a,a,b,a,b,a,a,a,a,a,a,a,a,a,a,b,a,a,a,a,b,a,a,a
			,a,a,b,a,a,a,a,b,a,a,a,a,a,a,b,a,b,a,a,a,a,a,a,b,a,a,a,a,a,a,b,a,b,a,a,a,b,a,a,a,a,a,b,a,b,a,a,a,b,a,a,a,b,a,a,a,b,a,a,a,b,a,a,b,b,a,a,a,a,b,b,a,a,a,a,a,a,a,b,b,a,a,b,a,b,a,a,a,a,a,b,a,a,a,a,b,a,a,a,a,b,a,a,a,a,b,a,a,a,a,a,a,b,a,a,a,b,b,b,a,a,a,a,a,b,a,a,a
			,b,a,a,a,a,b,a,a,a,b,a,a,a,a,b,a,a,b,a,a,a,a,b,a,b,a,a,b,a,a,a,a,a,b,a,b,a,a,a,a,a,a,b,a,b,a,a,a,a,a,b,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,b,a,b,b,b,b,b,b,b,a,b,b,b,b,b,b,b,a,b,a,a,b,a,a,b,a,b,a,a,a,a,a,b,a,b,a,a,a,a,a,b,a,a,b,b,b,a,a,a,a,a,a,a,b,a,a,a,a,b,a,a,a
			,a,a,b,a,a,a,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,a,a,b,a,a,a,a,b,b,b,b,b,b,b,a,b,a,a,a,a,a,b,a,b,a,a,a,b,a,a,a,b,a,a,b,b,a,a,a,b,a,a,a,b,a,a,a,a,b,a,a,a,a,a,a,a,a,b,a,a,a,b,a,b,a,a,a,a,a,b,a,a,b,b,b,b,b,a,a,b,a,a,a,a,b,a,a,a,a,a,b,a,a,a,a,a,a,a,b,a,a,a,b,a,a,a,b
			,a,a,a,a,a,a,b,a,a,b,a,a,a,a,a,b,a,b,a,a,a,a,b,a,b,a,a,b,a,a,a,a,a,b,a,b,a,a,a,a,a,a,b,a,b,b,b,b,b,b,a,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,b,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,b,a,b,a,a,b,a,a,b,a,b,b,b,b,b,b,a,a,b,b,b,b,b,b,a,a,a,a,a,a,b,b,a,a,a,a,a,b,a,a,a,a,b,a,a,a
			,a,a,b,a,a,a,b,a,b,a,a,a,a,a,a,b,a,a,a,a,a,a,b,a,a,a,a,a,a,a,a,b,a,a,a,a,b,a,a,a,a,b,b,a,b,a,a,a,a,b,a,a,a,b,b,a,b,a,a,a,b,a,a,a,b,a,a,a,b,b,a,a,a,a,a,a,a,a,b,a,a,a,b,a,b,a,a,a,a,a,b,a,a,a,a,b,a,a,a,a,b,a,a,a,a,b,a,a,a,a,b,a,a,a,a,a,a,a,a,b,a,a,b,a,a,a,a,b
			,a,a,a,a,a,a,b,a,a,b,a,a,a,a,a,b,a,b,a,a,a,b,a,a,b,a,b,b,b,b,b,a,a,b,a,b,a,a,a,a,a,a,b,a,b,a,a,a,a,a,b,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,b,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,b,a,b,a,a,a,b,a,b,a,b,a,a,a,a,a,a,a,b,a,a,a,b,a,a,a,a,a,a,a,a,a,b,a,a,a,a,b,a,a,a,a,b,a,a,a
			,a,a,b,a,a,b,a,a,a,b,a,a,a,a,a,b,a,a,a,a,a,a,b,a,a,a,a,a,b,b,b,b,b,b,b,a,b,b,b,b,b,b,a,a,b,a,a,a,a,a,b,a,a,a,a,a,b,a,a,a,b,a,a,a,b,a,a,a,a,b,a,a,a,a,a,a,a,a,b,a,a,a,b,a,b,a,a,a,a,a,b,a,a,a,a,b,a,a,a,a,b,a,a,a,a,b,a,a,a,b,a,a,a,a,a,a,a,a,a,b,a,a,b,a,a,a,a,b
			,a,a,a,a,a,a,b,a,b,b,b,b,b,a,a,b,a,b,a,a,b,a,a,a,b,a,a,b,a,a,a,a,a,b,a,b,a,a,a,a,a,a,b,a,b,a,a,a,a,a,b,a,b,a,a,a,a,a,b,a,b,a,a,a,a,a,b,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,b,a,b,a,a,a,b,a,b,a,b,a,a,a,a,a,a,a,b,a,a,a,a,b,a,a,b,a,a,a,a,a,b,a,a,a,a,b,a,a,a,a,a,b,a,a
			,a,b,a,a,a,b,a,a,a,b,a,a,a,a,a,b,a,a,a,a,a,b,a,a,a,a,a,a,a,a,a,b,a,a,a,a,b,a,a,a,a,a,a,a,b,a,b,a,a,a,b,a,a,a,a,a,b,a,a,a,b,a,a,a,b,a,a,a,a,b,a,a,a,a,a,a,a,a,b,a,a,a,b,a,b,a,a,a,a,b,a,a,a,a,a,b,a,a,a,a,b,a,a,a,a,b,a,a,b,a,a,a,a,a,b,a,a,a,a,b,a,a,a,a,a,a,a,b
			,a,a,a,a,a,a,b,a,a,b,a,a,a,a,a,b,a,b,a,a,b,a,a,a,b,a,a,b,a,a,a,a,a,b,a,b,a,a,b,a,a,a,b,a,b,a,a,a,a,a,b,a,a,b,a,a,a,b,a,a,b,a,a,a,a,b,a,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,b,a,b,a,a,a,a,b,b,a,b,a,a,a,a,a,a,a,b,a,a,a,a,b,a,a,b,a,a,a,a,a,b,a,a,a,a,b,a,a,a,a,a,a,b,b
			,b,a,a,a,b,a,a,a,a,a,b,a,a,a,a,b,a,a,a,a,b,b,b,b,b,b,b,a,a,a,a,b,a,a,a,a,b,a,a,a,a,a,a,a,b,a,a,b,b,b,a,a,a,a,a,a,a,b,b,a,a,b,b,b,b,a,a,a,a,b,b,b,b,b,b,a,a,a,b,a,a,a,b,a,b,a,a,b,b,a,a,a,a,a,a,b,a,a,a,a,a,b,b,b,b,a,a,b,b,b,b,b,b,a,a,b,b,b,b,a,a,a,b,a,a,a,a,b
			,a,a,a,a,a,a,b,a,a,b,a,a,a,a,a,b,a,b,a,b,a,a,a,a,b,a,a,b,a,a,a,a,a,b,a,b,a,a,b,a,a,a,b,a,b,a,a,a,a,a,b,a,a,a,b,b,b,a,a,a,b,b,b,b,b,a,a,a,b,b,b,b,b,b,b,a,b,a,a,a,a,a,b,a,b,a,a,a,a,a,b,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,b,a,a,b,b,b,b,b,a,a,a,a,a,b,a,a,a,a,a,a,a,a
			,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,b
			,a,a,a,b,b,a,b,a,a,b,a,a,a,a,a,b,a,a,b,a,a,a,a,b,a,a,a,b,a,a,a,a,b,a,a,b,a,a,a,b,b,b,a,a,b,b,b,b,b,b,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a
			,a,b,a,a,a,b,a,a,b,a,a,a,b,a,a,a,a,a,b,a,a,a,a,a,a,a,b,a,a,b,a,a,a,b,a,a,b,a,a,a,a,b,b,a,a,a,a,b,a,a,b,a,a,b,a,a,a,b,a,a,a,b,a,a,b,a,a,a,a,a,a,b,a,b,a,a,a,a,a,a,a,a,a,b,a,a,b,b,a,b,a,b,a,a,a,a,a,b,a,a,a,a,a,b,a,b,b,a,a,a,b,b,a,b,a,b,a,a,a,b,a,b,a,a,a,b,a,a
			,b,a,a,a,a,b,a,a,a,b,a,a,a,a,b,a,a,b,a,b,b,b,b,a,a,a,a,b,b,b,b,b,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,b,b,b,a,a,a,a,b,a,a,a,a,a,a,b,b,a,a,a,a,a,b,b,a,a,a,a,a,b,b,a,a,a,a,a,b,a,b,a,a,a,a,b,b,a,a,a,a,a,b,b,a,a,a,a,a,b,b,a,a,a,a,b,a,a,b,a,a,a,a,b
			,b,b,b,a,a,a,b,b,a,a,a,b,b,b,b,a,a,a,b,a,a,a,a,a,a,a,a,b,b,a,a,a,a,a,b,b,a,a,a,a,b,a,a,b,a,a,a,a,b,b,a,a,a,b,a,a,a,b,a,a,a,a,b,b,a,a,a,a,a,a,a,b,a,b,a,a,a,a,a,a,a,a,a,b,a,b,a,a,b,b,a,b,a,a,a,a,a,b,a,a,a,a,a,b,b,a,a,b,a,b,a,a,b,b,a,b,a,a,a,b,a,b,a,a,a,b,a,a
			,a,b,b,b,b,a,b,a,a,b,b,b,b,b,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,b,b,b,b,b,b,a,b,a,a,a,a,a,a,a,b,a,a,a,b,a,a,a,a,a,a,a,a,a,b,a,a,b,a,a,a,b,a,a,b,a,a,a,b,a,a,b,a,a,a,a,b,b,a,a,a,a,b,a,a,b,a,a,a,b,a,a,b,a,a,a,b,a,a,b,a,a,a,a,b,b,a,a,a,a,a,a
			,a,b,a,a,a,a,a,a,a,a,a,a,b,a,a,a,a,a,b,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,b,a,a,a,b,a,a,a,a,a,a,a,a,a,a,a,a,a,b,a,b,a,a,a,a,a,a,a,a,a,b,a,b,a,a,a,b,a,b,a,a,a,a,a,b,a,a,a,a,a,b,a,a,a,b,a,b,a,a,a,b,a,a,b,a,b,a,a,b,a,a,a,b,a,a
			,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,b,b,b,b,b,b,a,a,b,b,b,b,a,a,a,b,b,b,b,a,a,b,a,a,a,a,a,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,b,a,a,b,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,b,b
			,a,b,a,a,a,b,b,b,a,a,a,a,b,a,b,b,a,a,b,a,a,a,a,a,a,b,a,b,b,a,a,a,a,b,a,b,a,a,a,a,b,b,b,a,a,a,a,b,b,b,a,a,a,b,a,a,a,b,a,a,b,b,b,b,b,a,a,a,a,a,a,b,a,b,a,b,b,a,a,a,b,b,a,b,a,b,a,a,a,b,a,b,a,b,b,a,a,b,a,a,a,b,a,b,a,a,a,b,a,b,a,a,a,b,a,a,b,a,b,a,a,b,a,a,a,b,a,a
			,a,a,a,b,a,a,a,b,b,b,b,b,a,a,b,b,b,b,a,a,a,a,a,a,b,a,a,b,a,a,a,a,b,a,b,a,a,a,a,b,a,b,a,a,a,a,a,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,b,b,b,a,a,a,a,b,b,b,a,a,a,a,a,b,a,a,a,a,a,a,b,b,b,a,a,a,b,b,b,a,a,a,b,a,a,a,b,a,a,a,b,b,b,a,a,a,a,b,b,b,a,a,a,b,a,a
			,b,b,a,a,b,a,a,a,b,a,a,a,b,b,a,a,b,a,b,a,a,b,a,a,a,b,b,a,a,b,a,a,a,b,b,a,a,a,a,b,a,a,a,b,a,a,b,a,a,a,b,a,a,b,a,a,a,b,a,a,a,a,a,b,a,a,a,a,a,a,a,b,a,b,b,a,a,b,a,b,a,a,b,b,a,b,a,a,a,b,a,b,b,a,a,b,a,b,a,a,b,a,a,b,a,a,a,b,a,b,a,a,a,b,a,a,b,a,b,a,a,b,a,a,a,b,a,a
			,a,a,b,b,a,a,a,b,a,a,a,a,a,b,a,a,a,a,b,a,a,a,a,a,b,a,a,b,a,a,a,a,b,a,b,a,a,a,a,b,a,b,a,a,a,a,a,a,b,a,a,a,a,a,a,b,b,b,b,b,a,a,a,a,b,a,a,a,a,b,a,a,a,b,a,a,b,a,a,a,b,a,a,a,a,b,a,a,a,a,a,b,a,a,b,b,a,b,a,a,a,b,a,a,b,a,a,a,b,a,a,b,a,a,a,b,a,a,b,a,a,a,b,a,a,b,a,a
			,a,b,a,a,b,a,a,a,b,a,a,a,b,a,a,a,b,a,b,a,a,a,a,a,a,b,a,a,a,b,a,a,a,b,a,a,a,a,a,b,a,a,a,a,a,a,b,a,a,a,a,a,a,b,a,a,a,b,a,a,a,a,a,b,a,a,a,a,a,a,a,b,a,b,a,a,a,b,a,b,a,a,a,b,a,b,a,a,b,b,a,b,a,a,a,b,a,b,a,b,a,a,a,b,b,a,a,b,a,b,a,a,b,b,a,a,a,b,a,a,a,b,a,a,a,b,a,a
			,a,a,b,b,a,a,a,b,a,a,a,a,a,b,a,a,a,a,a,a,a,a,a,b,a,a,a,b,a,a,a,a,b,a,b,a,a,a,a,b,a,b,b,b,b,b,a,a,b,a,a,a,a,a,a,a,a,b,a,a,a,a,a,b,a,a,a,a,a,a,a,a,a,b,a,a,b,a,a,a,b,a,a,a,a,b,a,a,a,a,b,a,a,a,a,b,a,b,a,a,a,b,a,a,b,a,a,a,b,a,a,b,a,a,a,a,a,a,b,a,a,a,a,a,a,b,a,a
			,a,b,a,a,b,b,b,b,b,a,a,a,b,a,a,a,b,a,b,a,a,a,a,a,a,b,a,a,a,b,a,a,a,b,a,a,a,a,a,a,b,b,b,a,a,a,a,b,b,b,a,a,a,a,b,b,b,b,a,a,a,a,b,a,a,a,a,a,a,a,a,b,a,b,a,a,a,b,a,b,a,a,a,b,a,a,b,b,a,b,a,b,a,a,a,b,a,b,b,b,a,a,a,b,a,b,b,a,a,a,b,b,a,b,a,a,a,b,a,a,a,b,b,b,b,b,a,a
			,a,b,a,b,a,a,b,a,a,a,a,a,a,b,a,a,a,a,a,a,a,a,a,b,a,a,a,a,b,b,b,b,a,a,b,a,a,a,b,b,a,b,a,a,a,a,a,a,b,a,a,a,a,a,a,a,a,b,a,a,a,a,b,a,a,a,a,a,a,a,b,b,b,b,a,a,b,b,b,b,b,a,a,a,a,b,a,a,a,a,b,a,a,a,a,b,a,b,a,a,a,b,a,a,b,a,a,a,b,a,a,b,a,a,a,a,a,a,b,a,a,a,a,a,a,b,a,a
			,a,b,a,a,b,a,a,a,a,a,a,a,b,a,a,a,b,a,b,a,a,a,a,a,a,b,a,a,a,b,a,a,a,b,a,a,a,a,a,a,a,a,a,b,a,a,a,a,a,a,b,a,a,a,a,a,a,b,a,a,a,b,a,a,a,a,a,b,a,a,a,b,a,b,a,a,a,b,a,b,a,a,a,b,a,a,a,a,a,b,a,b,a,a,a,b,a,b,a,a,b,a,a,b,a,a,a,a,a,a,a,a,a,b,a,a,a,b,a,a,a,b,a,a,a,a,a,a
			,a,b,a,b,a,a,b,b,b,b,b,a,a,b,a,b,b,b,a,a,a,a,b,a,a,a,a,b,a,a,a,a,b,a,a,b,b,b,a,b,a,b,a,a,a,a,a,a,b,a,a,a,a,a,a,a,b,a,a,a,a,a,b,a,a,a,a,b,a,b,a,a,a,b,a,a,b,a,a,a,a,a,a,a,a,b,a,a,a,a,b,a,a,a,a,b,a,b,a,a,a,b,a,a,b,a,a,a,b,a,a,b,a,a,a,a,a,a,b,a,a,a,a,a,a,b,a,a
			,a,b,a,a,b,a,a,a,b,a,a,a,b,a,a,a,b,a,b,a,a,a,a,a,a,b,a,a,a,b,a,a,a,b,a,a,a,a,a,b,a,a,a,b,a,a,b,a,a,a,b,a,a,a,a,a,a,b,a,a,a,b,a,a,a,a,a,b,a,a,a,b,a,b,a,a,a,b,a,b,a,a,a,b,a,b,a,a,a,b,a,b,a,a,a,b,a,b,a,a,b,a,a,b,a,a,a,a,a,a,a,a,a,b,a,a,a,b,a,a,a,b,a,a,a,a,a,a
			,b,a,a,b,a,a,b,a,a,a,a,b,a,b,b,a,a,a,b,a,a,a,b,a,a,a,a,b,a,a,a,a,b,a,a,a,a,a,a,b,a,b,a,a,a,a,a,a,b,a,a,a,a,a,a,a,b,b,b,a,a,a,b,a,a,a,a,b,a,b,a,a,b,b,a,a,b,a,a,a,b,a,a,a,a,b,a,a,a,a,a,b,a,a,b,a,a,b,a,a,a,b,a,a,b,a,a,a,b,a,a,b,a,a,a,b,a,a,b,a,a,a,b,a,a,a,b,b
			,b,b,a,a,a,b,b,b,a,a,a,a,b,a,a,a,b,a,b,b,b,b,b,b,a,b,a,a,a,b,a,a,a,b,a,a,a,a,a,a,b,b,b,a,a,a,a,b,b,b,a,a,a,a,a,a,a,b,b,a,b,b,b,b,b,a,a,a,b,b,b,a,a,b,b,b,b,a,a,a,b,b,b,b,a,a,b,b,b,a,a,b,a,a,a,b,a,b,a,a,a,b,a,b,a,a,a,a,a,a,a,a,a,b,a,b,b,a,a,a,a,b,a,a,a,a,a,a
			,b,a,a,b,a,a,a,a,a,a,a,b,a,b,a,a,a,a,b,a,a,b,a,a,a,a,a,b,a,a,a,a,b,a,a,a,a,a,a,b,a,b,a,a,a,a,a,a,b,a,a,a,a,a,a,b,a,a,a,b,b,a,a,b,b,b,b,a,a,a,b,b,a,b,a,a,a,b,b,b,a,a,a,a,a,b,a,a,a,a,a,a,b,b,a,a,a,a,b,b,b,a,a,a,a,b,b,b,b,a,a,a,b,b,b,a,a,a,a,b,b,b,a,a,a,a,a,a
			,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,b
			,b,b,b,b,b,a,a,a,a,a,a,b,a,b,a,a,a,a,b,a,a,b,a,a,a,a,a,b,a,a,a,a,b,a,b,a,a,a,b,a,a,b,a,a,a,a,a,a,b,b,b,b,b,b,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,b
			,a,b,a,a,a,a,b,a,a,a,b,b,b,a,a,a,a,a,a,b,a,a,a,b,a,b,a,a,b,a,b,a,a,a,a,b,a,b,a,a,a,a,b,a,a,b,a,a,a,a,a,a,b,b,a,a,b,a,b,a,a,a,b,a,b,a,b,a,b,a,b,a,b,a,a,a,a,b,a,a,a,a,b,a,b,a,b,a,a,b,b,a,b,a,a,a,b,a,b,a,b,a,b,a,b,a,b,a,a,b,a,b,a,a,a,b,a,b,a,a,a,b,a,b,a,a,a,a
			,a,a,a,b,a,a,b,a,a,a,a,b,a,b,a,a,a,a,b,a,a,b,a,a,a,a,a,a,b,b,b,b,a,a,a,b,b,b,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,b,a,a,a,a,a,a,a,b,a,a,a,b,a,b,a,a,a,a,a,b,a,a,a,b,a,b,a,a,a,b,b,b,a,a,b,a,a,b,a,a,a,a,a,b,a,a,b,a,b,b,a,a,b,a,b,b,a,a,a,b,a,b,a,a,a,b,a
			,b,a,a,a,a,b,a,a,a,b,a,a,a,b,a,a,b,a,a,b,a,a,b,a,b,a,a,a,b,b,b,a,a,a,b,a,b,a,a,a,a,b,a,a,a,b,a,a,a,a,a,b,a,a,a,b,a,b,a,a,a,b,b,a,b,b,b,a,b,a,b,a,b,a,a,a,a,b,a,a,a,b,a,a,b,b,a,a,b,a,a,a,a,b,a,b,a,a,b,a,b,a,a,a,b,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a
			,a,a,a,b,a,a,a,b,b,b,b,a,a,a,b,b,b,b,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,b,a,a,a,a,a,a,a,b,a,a,a,a,b,a,b,a,a,a,b,a,a,a,a,a,b,a,a,a,a,b,b,b,a,a,a,a,b,a,a,a,a,b,b,b,a,a,b,a,a,a,b,a,b,a,a,b,a,a,a,a,b,a,a,a,b,b,a,a,b,a,b,b,a,a,b,a,a,b,b,b,a,a,a,a,a
			,a,a,a,a,a,a,a,a,a,b,a,a,a,a,a,a,b,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,b,a,a,a,a,b,a,a,a,a,a,a,a,a,b,a,b,a,a,a,a,a,b,a,b,a,b,a,a,a,a,b,a,a,a,a,a,a,b,a,a,a,b,a,a,a,a,a,a,a,a,a,b,a,b,a,a,a,b,a,b,a,a,b,b,b,a,a,a,b,b,b,a,a,a,b,b,b,a,a,a,a
			,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,b,a,a,a,a,a,a,a,b,a,a,a,a,b,a,b,a,a,a,b,a,a,a,a,a,b,a,a,a,a,b,a,b,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,b,a,a,a,b,a,b,a,a,b,a,a,a,a,a,a,a,a,b,a,a,a,b,a,b,a,a,a,b,a,a,a,a,a,a,a,a,b,b
			,b,a,a,a,b,b,b,a,a,a,b,b,b,a,a,b,b,b,a,a,a,b,a,a,a,b,a,b,a,a,a,b,a,b,a,a,a,b,a,b,b,b,b,b,a,a,b,a,a,a,b,b,b,a,a,a,b,a,a,a,a,a,b,a,a,b,a,a,b,a,a,a,b,a,a,a,a,b,a,a,b,a,b,a,b,a,a,a,b,a,a,a,a,b,a,b,a,a,b,a,b,a,b,a,b,a,b,a,b,a,a,a,b,a,b,a,a,a,b,a,b,a,a,a,b,a,a,a
			,a,b,a,a,a,a,a,a,b,a,a,a,a,b,a,b,a,a,b,b,b,a,a,a,a,b,a,a,a,a,a,b,a,a,a,a,b,a,b,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,b,a,a,a,b,a,b,a,a,a,b,a,a,b,b,b,a,a,a,b,b,b,a,a,a,b,b,b,a,a,b,b,b,b,b,a,b,a,a,a,a,a,b,a,b,b,a,a,b,a,a,a,b,a,b,a,a,a,b,a,a,b,b,b,a,a,b,a,a
			,a,b,a,b,a,a,a,b,a,a,a,a,a,b,a,a,b,a,a,a,a,b,a,a,a,b,a,b,a,a,a,b,a,b,a,a,a,b,a,a,a,a,b,a,a,a,b,a,a,a,a,b,a,a,a,a,b,a,a,a,a,a,b,a,a,b,a,a,b,a,a,a,b,a,a,a,a,b,b,a,b,b,a,a,b,a,a,a,b,a,a,a,a,b,a,b,a,a,b,a,b,a,b,a,b,a,b,a,a,a,a,a,b,a,b,a,a,a,b,a,b,a,a,a,b,a,a,a
			,a,a,b,a,a,a,a,b,a,a,a,a,b,a,b,a,a,b,a,a,a,b,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,b,b,b,a,a,a,b,b,b,a,a,a,b,b,b,a,a,b,a,a,a,b,a,b,a,a,a,b,a,b,a,a,a,b,a,b,a,a,a,b,a,b,a,a,a,b,a,b,a,a,a,a,a,b,a,a,a,a,a,b,b,a,a,b,a,b,a,a,a,b,a,b,a,a,a,b,a,b,a,a,a,b,a,b,a,a
			,a,b,a,b,a,a,a,a,a,b,a,a,a,b,a,a,b,a,a,a,a,b,a,a,a,b,a,b,a,a,a,b,a,b,a,a,a,b,a,a,a,a,b,a,a,a,a,b,a,a,a,b,a,a,a,a,b,a,a,a,a,a,b,a,a,b,a,a,b,a,a,a,b,a,b,a,b,b,a,a,b,a,a,a,b,a,a,a,b,a,a,a,a,b,a,b,a,a,b,a,b,a,b,a,b,a,b,a,a,b,b,b,b,a,b,b,b,b,b,a,b,a,a,a,b,a,a,a
			,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,b,a,a,a,a,a,a,b,b,b,a,a,a,b,b,b,a,a,b,a,b,b,a,a,b,a,a,a,b,a,b,a,a,a,b,a,b,a,a,a,b,a,b,a,a,a,b,a,b,a,a,a,b,a,a,a,a,a,b,a,b,a,a,a,a,a,b,a,a,a,b,a,b,a,a,a,b,a,b,a,a,a,a,a,b,a,a,a,b,a,b,a,a,a,b,a,b,a,a,a,b,a,b,a,a,a,b,a,b,a,a
			,a,b,a,a,b,b,b,a,a,a,b,b,b,a,a,a,b,a,a,a,a,b,a,a,a,b,a,b,a,a,a,b,a,b,a,a,a,b,a,a,a,b,a,a,a,a,a,b,a,a,a,b,a,a,a,a,b,a,a,a,a,a,b,a,a,b,a,a,b,a,a,a,b,a,a,a,a,b,a,a,b,a,a,a,b,a,a,a,b,a,a,a,a,b,a,b,a,a,b,a,b,a,b,a,b,a,b,a,b,a,a,a,b,a,b,a,a,a,a,a,b,a,a,a,b,a,a,a
			,b,b,b,a,a,a,b,b,b,a,a,a,b,b,b,a,a,b,a,a,a,a,a,b,a,a,a,b,a,b,a,a,a,b,a,b,b,a,a,b,a,b,a,a,a,b,a,b,a,a,a,b,a,b,a,a,a,b,a,b,a,a,a,b,a,b,a,a,a,b,a,a,b,b,b,b,a,b,a,a,a,a,a,b,b,b,b,b,a,a,b,b,b,a,a,b,a,a,a,a,a,b,a,a,a,b,a,b,a,a,a,b,a,b,a,a,a,b,a,b,a,a,a,b,a,b,a,a
			,a,b,a,a,a,a,a,b,a,a,a,b,a,a,a,a,b,a,a,a,a,b,a,a,a,b,a,b,a,a,a,b,a,b,a,a,a,b,a,a,b,a,a,a,a,a,a,b,a,a,a,b,a,a,a,a,b,a,a,a,a,a,b,a,a,b,a,a,b,a,a,a,b,a,a,a,a,b,a,a,b,a,a,a,a,a,a,a,b,a,a,a,a,b,a,b,a,a,b,a,b,a,b,a,b,a,b,a,b,a,a,b,b,a,b,a,a,a,b,a,b,a,a,a,b,a,a,b
			,a,a,a,b,a,b,a,a,a,b,a,b,a,a,a,b,a,b,a,a,a,a,a,b,a,a,a,b,a,b,a,a,a,b,a,b,a,a,a,b,a,b,a,a,a,b,a,b,a,a,a,b,a,b,a,a,a,b,a,b,a,a,a,b,a,b,a,a,a,b,a,b,a,a,a,b,a,b,a,a,a,a,a,b,a,a,a,a,a,a,a,b,a,a,a,b,a,a,a,a,a,b,a,a,a,b,a,a,a,a,a,a,a,a,a,a,a,b,a,b,a,a,a,b,a,b,a,a
			,a,b,a,b,a,a,a,b,a,a,a,a,b,a,a,a,b,a,a,a,a,b,a,a,a,b,a,b,a,a,a,b,a,b,a,a,a,b,a,a,b,a,a,a,a,a,a,a,b,a,a,b,a,a,a,a,b,a,a,a,a,a,b,a,a,b,a,a,b,a,a,a,b,a,a,a,a,b,a,a,b,a,a,a,a,b,b,a,b,a,a,a,a,b,a,b,a,a,a,a,b,a,b,a,b,a,b,a,a,b,b,a,b,a,a,b,b,b,a,a,a,b,b,b,a,a,a,a
			,a,a,a,b,a,a,a,a,a,b,a,a,a,a,a,b,a,b,a,a,a,b,a,b,b,b,b,b,a,b,b,b,b,b,a,b,a,a,a,b,a,b,a,a,a,b,a,b,a,a,a,b,a,b,a,a,a,b,a,b,a,a,a,b,a,b,a,a,a,b,a,b,a,a,b,b,a,b,a,a,a,b,a,b,a,a,a,b,a,a,a,b,a,a,a,b,a,a,a,a,a,b,a,a,a,b,a,a,a,b,b,a,a,a,a,a,a,b,a,b,a,a,a,b,a,a,b,b
			,b,a,a,a,b,b,b,a,a,a,b,b,b,a,a,a,b,b,a,a,a,a,b,b,b,b,a,a,b,b,b,b,a,a,b,b,b,b,a,b,b,b,b,b,a,a,a,a,b,a,a,b,a,a,a,a,b,a,a,a,a,a,b,a,a,b,a,a,b,a,a,a,b,a,a,a,a,b,a,a,b,a,a,a,a,a,b,a,b,a,a,a,a,b,a,b,a,a,b,a,b,a,b,a,b,a,b,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a
			,b,b,b,b,a,a,b,b,b,b,a,a,b,b,b,b,a,a,b,b,b,a,a,b,a,a,a,a,a,b,a,a,a,a,a,b,a,a,a,b,a,b,a,a,a,b,a,b,a,a,a,b,a,b,a,a,a,b,a,a,b,b,b,b,a,a,b,b,b,b,a,a,b,b,a,b,a,a,b,b,b,a,a,a,b,b,b,a,a,a,a,a,b,b,a,b,b,b,b,b,a,b,a,a,a,b,a,a,a,a,b,a,a,a,a,a,b,b,a,a,b,b,b,a,a,a,a,a
			,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,b,a,a,a,b,a,b,a,b,a,a,b,a,a,b
			,a,a,a,b,a,b,a,a,a,b,a,b,a,a,a,b,a,a,a,b,a,a,a,b,a,a,a,b,a,b,a,a,a,b,a,b,a,a,a,b,a,a,b,b,b,a,a,a,b,b,b,a,a,a,b,b,b,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a
			,a,a,a,b,a,a,a,a,a,a,b,a,a,a,b,a,a,a,b,b,b,a,a,a,b,b,b,a,a,a,b,b,b,a,a,b,a,b,b,a,a,a,b,b,b,a,a,a,b,b,b,a,a,b,a,a,a,b,a,b,a,a,a,b,a,b,a,a,a,b,a,b,b,b,b,b,a,a,b,b,a,b,a,b,a,b,a,b,a,b,a,a,a,b,a,b,a,b,a,b,a,a,a,a,a,a,b,a,a,a,a,a,b,a,b,a,a,a,b,a,b,a,a,b,b,a,a,b
			,a,a,b,b,a,b,a,a,b,b,a,b,a,a,b,b,a,a,a,a,b,a,a,a,b,b,b,a,a,a,b,b,b,a,a,b,a,a,a,b,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,b,a,a,b,a,a,a,a,b,a,a,a,a,a,b,b,b,b,a,b,b,b,a,a,a,b,b,b,a,b,b,b,b,a,a,b,a,b,b,a,a,b,b,a,a,b,a,a,a,b,a,a,a,b,a,a,a,a,b,a,a,a,a,a,a,a,a
			,a,b,a,a,b,b,a,a,a,a,b,a,a,b,a,a,a,b,a,a,a,b,a,b,a,a,a,b,a,b,a,a,a,b,a,b,b,a,a,b,a,b,a,a,a,b,a,b,a,a,a,b,a,b,a,a,a,b,a,b,a,a,a,b,a,a,b,a,b,a,a,a,a,a,b,a,a,b,a,a,b,a,a,b,b,a,a,a,a,b,a,a,b,a,b,a,a,a,b,a,b,a,a,a,a,a,a,a,a,a,a,a,b,a,b,a,a,b,a,a,a,b,a,a,b,a,a,a
			,b,b,a,b,a,a,b,b,a,b,a,a,b,b,a,b,a,a,b,b,b,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,b,a,a,a,b,b,b,b,a,a,b,a,a,b,a,b,a,a,b,a,a,a,a,a,a,a,b,a,a,a,a,b,a,a,a,b,b,a,a,a,b,a,b,a,a,a,b,a,a,a,a,b,a,b,b,a,a,b,b,a,a,b,a,b,a,a,a,b,a,a,a,b,a,a,a,a,b,a,a,a,a,a,a,a,b
			,b,a,a,a,a,a,b,b,a,a,b,a,b,a,a,a,a,a,a,a,a,b,a,b,a,a,a,a,a,b,a,a,a,b,a,b,a,a,a,b,a,b,a,a,a,b,a,b,a,a,a,a,a,b,a,a,a,b,a,a,b,a,b,a,a,a,b,a,b,a,a,a,a,a,b,a,a,b,a,a,b,b,a,b,a,a,a,a,a,b,a,b,a,b,a,a,a,a,a,b,a,b,a,b,b,b,b,b,b,b,a,a,b,a,b,a,a,a,b,a,b,a,a,a,b,a,a,a
			,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,b,a,a,a,a,b,b,b,b,a,a,b,b,b,b,a,a,a,a,a,a,a,a,a,a,a,a,a,b,a,a,a,a,a,a,b,b,b,a,a,a,a,a,a,b,a,a,a,a,a,a,b,b,b,a,a,a,a,b,a,b,a,a,a,b,a,a,a,a,b,a,b,a,a,a,b,a,a,a,b,a,a,b,a,b,a,b,a,b,a,a,a,a,a,b,a,a,a,a,a,b,b,a
			,a,a,a,a,a,a,a,a,b,a,b,b,b,a,a,a,a,a,b,b,b,b,a,b,a,a,a,a,a,b,b,b,b,b,a,b,a,a,a,b,a,b,a,a,a,b,a,a,b,b,b,a,a,b,a,a,a,b,a,a,b,a,b,a,a,a,a,b,a,a,a,a,a,b,a,a,a,b,a,b,a,b,a,b,a,a,a,a,a,b,a,b,a,b,a,a,a,a,a,b,a,b,a,a,a,a,a,a,a,a,a,b,a,a,a,b,a,b,a,b,a,b,a,a,b,a,a,a
			,b,a,b,a,a,a,b,b,b,b,a,a,a,b,a,a,a,a,b,b,b,b,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,b,b,b,b,b,a,a,b,a,a,a,b,b,b,a,a,b,a,a,a,b,a,a,a,a,b,b,b,b,b,b,b,a,a,b,a,a,b,b,b,b,b,b,a,b,a,a,a,b,b,b,b,b,b,a,b,a,a,a,b,a,a,a,b,a,a,b,a,b,a,b,a,b,a,a,b,b,b,b,b,b,b,a,b,a,a,a
			,a,a,a,a,a,a,b,b,a,a,b,a,a,b,a,a,a,b,a,a,a,b,a,b,a,a,a,a,a,b,a,a,a,a,a,b,a,a,a,b,a,b,a,a,a,b,a,a,a,a,a,b,a,b,a,a,a,b,a,a,b,a,b,a,a,a,b,a,b,a,a,a,b,a,a,a,a,b,b,a,a,b,a,b,a,a,a,a,a,b,a,a,b,a,b,a,a,a,b,a,b,a,a,a,a,a,b,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a
			,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,b,b,b,a,a,a,b,b,b,a,a,b,a,a,a,b,a,a,a,a,b,a,a,a,b,a,a,a,a,b,a,a,a,b,a,a,a,b,a,a,a,a,a,a,a,b,a,a,a,a,b,a,a,a,b,a,a,a,a,a,a,b,a,a,a,b,a,a,a,a,a,a,b,a,a,a,b,a,a,a,b,a,a,b,a,b,a,b,a,b,a,a,a,a,a,b,a,a,a,a,a,b,b,a
			,a,a,a,a,b,b,a,a,a,a,b,a,a,a,b,a,a,b,a,a,b,b,a,b,a,a,a,b,a,b,a,a,a,b,a,b,a,a,a,b,a,b,a,a,a,b,a,b,a,a,a,b,a,b,a,a,a,b,a,a,a,b,a,a,a,a,b,a,b,a,a,a,b,a,a,a,a,a,b,a,a,b,a,b,a,a,a,a,a,b,a,a,a,b,a,b,a,b,a,b,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,b
			,a,a,a,b,a,a,b,b,b,a,a,a,b,b,b,a,a,a,b,b,b,a,a,b,a,a,a,b,a,b,a,a,a,b,a,b,a,a,a,b,a,a,a,a,b,a,a,a,b,a,a,a,a,b,a,a,a,b,a,a,b,b,b,a,a,a,a,a,a,b,a,a,a,a,b,a,a,a,b,b,a,a,a,b,a,b,a,a,a,b,a,a,a,a,b,a,b,a,a,a,b,a,a,a,b,a,a,a,b,a,a,a,b,a,a,a,a,a,a,b,a,a,a,a,a,a,a,b
			,b,a,a,b,a,a,a,a,a,a,b,a,a,a,b,a,a,a,b,b,a,b,a,a,b,b,b,a,a,a,b,b,b,a,a,b,a,a,a,b,a,a,b,b,b,a,a,a,b,b,b,a,a,a,b,b,b,b,a,a,a,b,a,a,a,b,a,a,a,b,a,b,b,b,b,b,a,b,a,b,b,a,a,b,a,a,a,b,a,b,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,b
			,a,a,a,b,a,b,a,a,a,b,a,b,a,a,a,b,a,b,a,a,a,b,a,b,a,a,a,b,a,b,a,a,a,b,a,b,a,a,a,b,a,a,a,b,a,a,a,a,b,a,a,a,a,b,a,a,a,b,a,a,a,b,a,a,b,a,a,a,a,b,a,a,a,a,a,b,b,b,a,a,b,b,b,a,a,a,b,b,b,a,b,b,b,b,a,a,b,a,a,a,b,a,a,a,b,a,a,a,b,a,a,a,b,a,a,a,a,a,a,b,a,a,a,a,a,a,a,a
			,a,b,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,b
			,a,a,a,b,a,a,a,a,a,b,a,b,a,a,a,a,a,b,a,a,a,b,a,b,b,b,b,b,a,b,a,a,a,b,a,b,a,a,a,b,a,a,b,a,a,a,a,a,b,a,a,a,a,b,a,a,a,b,a,a,a,b,a,a,b,a,b,b,b,b,b,b,b,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a
			,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,b
			,a,a,a,b,a,a,b,b,b,b,a,b,a,a,a,a,a,b,b,b,b,b,a,b,a,a,a,a,a,b,a,a,a,b,a,b,a,a,a,b,a,a,b,a,a,a,a,a,b,a,a,a,a,b,a,a,a,b,a,a,a,b,b,a,b,a,a,a,a,a,a,a,a,a,a,a,a,b,a,b,b,b,b,b,b,b,a,b,b,b,b,b,b,b,a,b,b,b,a,b,a,b,a,b,b,b,a,b,a,b,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a
			,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,b
			,a,a,a,b,a,b,a,a,a,b,a,b,a,a,a,a,a,b,a,a,a,a,a,b,a,a,a,b,a,b,a,a,a,b,a,b,a,a,a,b,a,b,b,b,b,b,a,a,b,a,a,a,a,b,b,a,a,b,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,b,a,a,b,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a
			,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,b
			,a,a,a,b,a,b,a,a,b,b,a,b,a,a,a,b,a,b,a,a,a,b,a,a,b,b,b,a,a,a,b,b,b,a,a,a,b,b,b,b,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,b,a,b,a,a,b,b,b,a,a,b,a,a,b,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a
			,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a
			,b,b,b,b,a,a,b,b,a,b,a,a,b,b,b,a,a,a,b,b,b,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,b,a,a,a,a,b,b,a,a,b,a,b,a,a,b,a,a,b,a,b,a,b,a,a,b,b,b,b,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a
			,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a
			,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,b,b,b,b,b,b,b,a,b,b,b,b,b,b,b,a,b,b,b,b,b,a,b,a,a,b,a,b,a,b,a,a,a,b,a,b,a,b,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a
			,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a
			,b,b,b,a,a,b,a,a,a,b,a,a,b,b,b,a,a,b,b,b,a,a,b,b,b,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,b,a,a,a,b,a,a,a,b,a,a,b,a,b,a,b,a,b,b,b,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a
			,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,b
			,a,a,a,b,a,a,b,b,b,a,a,b,a,a,b,a,b,a,a,b,a,b,a,a,b,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,b,a,a,b,a,b,a,a,a,b,b,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a
			,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,b
			,a,a,a,b,a,a,a,b,a,a,a,a,b,b,b,a,a,a,b,a,a,a,a,b,a,a,b,b,b,b,b,b,b,a,a,a,a,a,a,a,b,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a
			,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,b
			,a,a,a,b,a,a,b,b,b,a,a,b,a,a,b,a,a,b,a,a,a,b,a,a,b,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a
			,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a
			,b,b,b,a,a,b,a,a,a,b,a,b,b,b,b,a,b,b,b,b,a,a,b,b,b,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a
			,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a
			,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a
			,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a
			,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a
			,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a
			,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a
			,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a
			,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a
			,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a
			,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a
			,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a
			,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a
			,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a
			,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a
			,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a
			,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a
			,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a
			,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a
			,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a
			,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a
			,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a
			,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a
			,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a
			,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a
			,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a
			,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a
			,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a
			,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a
			,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a
			,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a
			,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a
			,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a
			,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a
			,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a
			,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a
			,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a
			,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a
			,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a
			,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a
			,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a
			,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a
			,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a
			,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a
			,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a
			,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a
			,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a
			,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a
			,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a
			,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a};

			return colors;

        }
Example #15
0
 internal static Color CConvert(Microsoft.Xna.Framework.Graphics.Color c)
 {
     return(Color.FromArgb(c.A, c.R, c.G, c.B));
 }
Example #16
0
        internal static pTexture CreateText(string text, float size, Vector2 restrictBounds, Color color, ShadowType shadow, bool bold, bool italic, bool underline, TextAlignment alignment, bool forceAa, out Vector2 measured, out RectangleF[] characterRegions, Color background, Color border, int borderWidth, bool measureOnly, bool getCharacterRegions, FontFace fontFace, Vector4 cornerBounds, Vector2 padding, pTexture lastTexture = null, int startIndex = 0, int length = -1)
        {
            characterRegions = null;
            if (text == null)
            {
                measured = Vector2.Zero;
                return(null);
            }

            if (ConfigManager.dDisableTextRendering)
            {
                measured = new Vector2(text.Length * size, size);
                return(null);
            }

#if DEBUG
            if (!text.Contains(@"NativeText"))
            {
                int  limit_per_second = osu.GameModes.Play.Player.Playing ? 5 : 58;
                bool newSecond        = GameBase.Time / 1000 != currentSecond;

                drawCount++;
                if (drawCount == limit_per_second)
                {
                    Debug.Print(@"NativeText: High number of text refreshes per second.");
                }

                if (newSecond)
                {
                    currentSecond = GameBase.Time / 1000;
                    drawCount     = 0;
                }
            }
#endif

            //This lock ensures we are only using the shared GDI+ object (FromHwnd) in one place at a time.
            lock (createTextLock)
            {
                try
                {
                    using (System.Drawing.Graphics graphics = System.Drawing.Graphics.FromHwnd(IntPtr.Zero))
                        using (StringFormat sf = new StringFormat())
                        {
                            if (dpiRatio == 0)
                            {
                                dpiRatio = 96 / graphics.DpiX;
                            }

                            size *= dpiRatio;

                            GameBase.PerformanceMonitor.ReportCount(CounterType.NativeText);

                            graphics.TextRenderingHint = TextRenderingHint.AntiAlias;

                            SizeF measuredSize;

                            string face = GetFontFace(fontFace);

                            if (face.StartsWith(@"Aller"))
                            {
                                //if we are using the default osu! font, allow specific language overrides based on simple detection.
                                string fontFaceOverride = getLanguageSpeicificFont(text);
                                if (fontFaceOverride != null)
                                {
                                    face = fontFaceOverride;
                                }
                            }

                            if (startIndex != 0 || length > 0)
                            {
                                text = text.Substring(startIndex, length);
                            }
                            else if (length == -1)
                            {
                                length = text.Length;
                            }


                            if (size < 20 && face.EndsWith(@" Light"))
                            {
                                face = face.Replace(@" Light", string.Empty);
                            }

                            FontStyle fs = FontStyle.Regular;
                            if (bold)
                            {
                                if (face.EndsWith(@" Light"))
                                {
                                    face = face.Replace(@" Light", string.Empty);
                                }
                                fs |= FontStyle.Bold;
                            }

                            if (italic)
                            {
                                fs |= FontStyle.Italic;
                            }

                            if (underline)
                            {
                                fs |= FontStyle.Underline;
                            }

                            switch (alignment)
                            {
                            case TextAlignment.Left:
                            case TextAlignment.LeftFixed:
                                sf.Alignment = StringAlignment.Near;
                                break;

                            case TextAlignment.Centre:
                                sf.Alignment = StringAlignment.Center;
                                break;

                            case TextAlignment.Right:
                                sf.Alignment = StringAlignment.Far;
                                break;
                            }

                            if (!OsuMain.IsWine && face.StartsWith(@"Aller"))
                            {
                                for (char c = '0'; c <= '9'; c++)
                                {
                                    text = text.Replace(c, (char)(c + (0xf83c - '0')));
                                }
                            }

                            Font f = GetFont(face, size * ScaleModifier, fs);
                            if (ScaleModifier != 1)
                            {
                                restrictBounds *= ScaleModifier;
                            }

                            try
                            {
                                if (text.Length == 0)
                                {
                                    text = " ";
                                }
                                measuredSize = restrictBounds != Vector2.Zero
                                                ? graphics.MeasureString(text, f, new SizeF(restrictBounds.X, restrictBounds.Y), sf)
                                                : graphics.MeasureString(text, f);
                            }
                            catch (InvalidOperationException)
                            {
                                measured = Vector2.Zero;
                                return(null);
                            }

                            int width  = (int)(measuredSize.Width + 1);
                            int height = (int)(measuredSize.Height + 1);

                            if (restrictBounds.Y != 0)
                            {
                                height = (int)restrictBounds.Y;
                            }

                            if (restrictBounds.X != 0 && (alignment != TextAlignment.Left || background.A > 0))
                            {
                                width = (int)restrictBounds.X;
                            }

                            if (padding != Vector2.Zero && restrictBounds == Vector2.Zero)
                            {
                                width  += (int)(padding.X * 2);
                                height += (int)(padding.Y * 2);
                            }

                            measured = new Vector2(width, height);
                            float offset = Math.Max(0.5f, Math.Min(1f, (size * ScaleModifier) / 14));

                            if (getCharacterRegions)
                            {
                                characterRegions = new RectangleF[text.Length];

                                // SetMeasurableCharacterRanges only accepts a maximum of 32 intervals to be queried, so we as the library user are
                                // forced to split the string into 32 character long chunks and perform MeasureCharacterRanges on each.
                                int numIntervals = (text.Length / 32) + 1;
                                for (int i = 0; i < numIntervals; ++i)
                                {
                                    int offsetIndex = i * 32;
                                    int end         = Math.Min(text.Length - offsetIndex, 32);

                                    CharacterRange[] characterRanges = new CharacterRange[end];
                                    for (int j = 0; j < end; ++j)
                                    {
                                        characterRanges[j] = new CharacterRange(j + offsetIndex, 1);
                                    }

                                    sf.SetMeasurableCharacterRanges(characterRanges);
                                    Region[] regions = graphics.MeasureCharacterRanges(
                                        text,
                                        f,
                                        new RectangleF(
                                            padding.X,
                                            padding.Y,
                                            restrictBounds.X == 0 ? Single.PositiveInfinity : restrictBounds.X,
                                            restrictBounds.Y == 0 ? Single.PositiveInfinity : restrictBounds.Y),
                                        sf);

                                    for (int j = 0; j < end; ++j)
                                    {
                                        Region region = regions[j] as Region;
                                        characterRegions[j + offsetIndex] = region.GetBounds(graphics);
                                    }
                                }
                            }

                            if (measureOnly)
                            {
                                int startSpace = 0;
                                int endSpace   = 0;

                                int i = 0;
                                while (i < text.Length && text[i++] == ' ')
                                {
                                    startSpace++;
                                }
                                int j = text.Length - 1;
                                while (j >= i && text[j--] == ' ')
                                {
                                    endSpace++;
                                }
                                if (startSpace == text.Length)
                                {
                                    endSpace += startSpace;
                                }

                                measured = new Vector2(width + (endSpace * 5.145f * size / 12), height);
                                return(null);
                            }

                            using (Bitmap b = new Bitmap(width, height, PixelFormat.Format32bppArgb))
                                using (System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(b))
                                {
                                    //Quality settings
                                    g.TextRenderingHint = graphics.TextRenderingHint;
                                    g.SmoothingMode     = SmoothingMode.HighQuality;
                                    g.InterpolationMode = InterpolationMode.HighQualityBicubic;

                                    if (background.A > 0)
                                    {
                                        if (cornerBounds != Vector4.Zero)
                                        {
                                            fillRoundedRectangle(g, new Rectangle(0, 0, width, height), new SolidBrush(OsuMathHelper.CConvert(background)), cornerBounds);

                                            if (borderWidth > 0)
                                            {
                                                drawRoundedRectangle(g,
                                                                     new Rectangle(0, 0, width - (int)Math.Ceiling(borderWidth / 2f), height - (int)Math.Ceiling(borderWidth / 2f)),
                                                                     new Pen(OsuMathHelper.CConvert(border), borderWidth),
                                                                     cornerBounds);
                                            }
                                        }
                                        else
                                        {
                                            g.Clear(OsuMathHelper.CConvert(background));
                                            if (borderWidth > 0)
                                            {
                                                g.DrawRectangle(new Pen(OsuMathHelper.CConvert(border), borderWidth),
                                                                new Rectangle(borderWidth / 2, borderWidth / 2, width - borderWidth, height - borderWidth));
                                            }
                                        }
                                    }
                                    else
                                    {
                                        g.Clear(System.Drawing.Color.FromArgb(1, color.R, color.G, color.B));
                                    }


                                    using (Brush brush = new SolidBrush(OsuMathHelper.CConvert(color)))
                                    {
                                        if (restrictBounds != Vector2.Zero)
                                        {
                                            restrictBounds.X -= padding.X * 2;
                                            restrictBounds.Y -= padding.Y * 2;

                                            switch (shadow)
                                            {
                                            case ShadowType.Normal:
                                                g.DrawString(text, f, shadowBrush, new RectangleF(padding.X - offset, offset + padding.Y, restrictBounds.X, restrictBounds.Y), sf);
                                                g.DrawString(text, f, shadowBrush, new RectangleF(padding.X + offset, offset + padding.Y, restrictBounds.X, restrictBounds.Y), sf);
                                                break;

                                            case ShadowType.Border:
                                                Brush borderBrush = greyBrush;
                                                if (background.A == 0 && borderWidth == 1 && border.A > 0)
                                                {
                                                    borderBrush = new SolidBrush(OsuMathHelper.CConvert(border));
                                                }

                                                g.DrawString(text, f, borderBrush, new RectangleF(padding.X + offset, padding.Y + offset, restrictBounds.X, restrictBounds.Y), sf);
                                                g.DrawString(text, f, borderBrush, new RectangleF(padding.X + offset, padding.Y - offset, restrictBounds.X, restrictBounds.Y), sf);
                                                g.DrawString(text, f, borderBrush, new RectangleF(padding.X - offset, padding.Y + offset, restrictBounds.X, restrictBounds.Y), sf);
                                                g.DrawString(text, f, borderBrush, new RectangleF(padding.X - offset, padding.Y - offset, restrictBounds.X, restrictBounds.Y), sf);
                                                break;
                                            }

                                            g.DrawString(text, f, brush, new RectangleF(padding.X, padding.Y, restrictBounds.X, restrictBounds.Y), sf);
                                        }
                                        else
                                        {
                                            switch (shadow)
                                            {
                                            case ShadowType.Normal:
                                                g.DrawString(text, f, shadowBrush, padding.X - offset, padding.Y + offset);
                                                g.DrawString(text, f, shadowBrush, padding.X + offset, padding.Y + offset);
                                                break;

                                            case ShadowType.Border:
                                                Brush borderBrush = greyBrush;
                                                if (background.A == 0 && borderWidth == 1 && border.A > 0)
                                                {
                                                    borderBrush = new SolidBrush(OsuMathHelper.CConvert(border));
                                                }

                                                g.DrawString(text, f, borderBrush, padding.X + offset, padding.Y + offset);
                                                g.DrawString(text, f, borderBrush, padding.X - offset, padding.Y + offset);
                                                g.DrawString(text, f, borderBrush, padding.X + offset, padding.Y - offset);
                                                g.DrawString(text, f, borderBrush, padding.X - offset, padding.Y - offset);
                                                break;
                                            }

                                            g.DrawString(text, f, brush, padding.X, padding.Y);
                                        }
                                    }

                                    //if (lastTexture == null || lastTexture.isDisposed)
                                    {
                                        lastTexture            = pTexture.FromBitmap(b);
                                        lastTexture.Disposable = true;
                                    }

                                    /*else
                                     * {
                                     *  lastTexture.Width = b.Width;
                                     *  lastTexture.Height = b.Height;
                                     *  lastTexture.SetData(b);
                                     * }*/

                                    return(lastTexture);
                                }
                        }
                }
                catch (Exception e)
                {
                    measured = Vector2.Zero;
                    return(null);
                }
            }
        }