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); }
public MenuItem(String _text, Vector2 _position, Microsoft.Xna.Framework.Graphics.Color _color) { text = _text; position = _position; color = _color; }
/// <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; }
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."); } } }
/// <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(); }
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; }
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)); }
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); }
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))); }
internal static System.Drawing.Color CConvert(Color c) { return(System.Drawing.Color.FromArgb(c.A, c.R, c.G, c.B)); }
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; }
internal static Color CConvert(Microsoft.Xna.Framework.Graphics.Color c) { return(Color.FromArgb(c.A, c.R, c.G, c.B)); }
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); } } }