using System;
using System.Linq;
using System.Collections.Generic;
using System.IO;
using static System.Console;
using System.Numerics;
using System.Text.RegularExpressions;
using System.Runtime.Serialization.Formatters.Binary;

namespace atcorder2
{
    [Serializable]
    static class Program
    {
        public static long Read()
        {
            return long.Parse(Console.ReadLine());
        }

        public static long[] Reads()
        {
            return Console.ReadLine().Split().Select(long.Parse).ToArray();
        }


        public static long Gcd(long x, long y)
        {
            if (x < y) Gcd(y, x);
            while (y > 0)
            {
                var z = x;
                x = y;
                y = z % y;
            }
            return x;
        }

        public static long Lcm(long x, long y)
        {
            return x * y / Lcm(x, y);
        }

        public static bool IsLowercaseAlphabet(char target)
        {
            return new Regex("^[a-z]+$").IsMatch(target.ToString());
        }

        public static T DeepCopy<T>(this T src)
        {
            using (var memoryStream = new MemoryStream())
            {
                var binaryFormatter = new BinaryFormatter();
                binaryFormatter.Serialize(memoryStream, src);
                memoryStream.Seek(0, System.IO.SeekOrigin.Begin);
                return (T)binaryFormatter.Deserialize(memoryStream);
            }
        }


        public static bool Prime(long n)
        {
            if (n < 2) return false;
            else if (n == 2) return true;
            else if (n % 2 == 0) return false;

            for (int i = 3; i <= Math.Sqrt(n); i++)
            {
                if (n % i == 0) return false;
            }
            return true;
        }


        public static int UpperBound<T>(T[] a, T v)
        {
            return UpperBound(a, v, Comparer<T>.Default);
        }

        public static int UpperBound<T>(T[] a, T v, Comparer<T> cmp)
        {
            var l = 0;
            var r = a.Length - 1;
            while (l <= r)
            {
                var mid = l + (r - 1) / 2;
                var res = cmp.Compare(a[mid], v);
                if (res <= 0) l = mid + 1;
                else r = mid - 1;
            }
            return l;
        }
        public static int LowerBound<T>(T[] a, T v)
        {
            return LowerBound(a, v, Comparer<T>.Default);
        }

        public static int LowerBound<T>(T[] a, T v, Comparer<T> cmp)
        {
            var l = 0;
            var r = a.Length - 1;
            while (l <= r)
            {
                var mid = l + (r - 1) / 2;
                var res = cmp.Compare(a[mid], v);
                if (res == -1) l = mid + 1;
                else r = mid - 1;
            }
            return l;
        }

        /*public static int LowerBound<T>(T[] a, T v, int start, Comparer<T> cmp)
        {
            var l = start;
            var r = a.Length - 1;
            while (l < r)
            {
                var mid = ((r - l) >> 1) + l;

                if (cmp.Compare(a[mid], v) < 0) l = mid + 1;
                else r = mid;
            }
            return l;
        }*/
        public static int LowerBound(long[] a, long v)
        {
            var l = -1;
            var r = a.Length;
            while (r - l > 1)
            {
                var mid = (l + r) / 2;
                if (a[mid] >= v) r = mid;
                else l = mid;
            }
            return r;
        }
        public static  bool LowerBoundf(long[] a, long v)
        {
            var l = -1;
            var r = a.Length;
            var f = false;
            while (r - l > 1)
            {
                var mid = (l + r) / 2;
                if (a[mid] >= v)
                {
                    r = mid;
                    f = true;
                }
                else l = mid;
            }
            return f;
        }

        static void Main(string[] args)
        {
            var sw = new StreamWriter(OpenStandardOutput()) { AutoFlush = false };
            SetOut(sw);



            var s = ReadLine().ToList();
            var f = new bool['z' - 'a'+1];
            for (int i = 0; i < s.Count; i++)
            {
                f[s[i] - 'a'] = true;
            }

            var ff = false;
            for (int j = 0; j < 'z' - 'a'; j++)
            {
                if (!f[j])
                {
                    s.Add((char)(j + 'a'));
                    ff = true;
                    break;
                }
            }
            if (ff)
            {
                for (int i = 0; i < s.Count; i++)
                {
                    Write(s[i]);
                }
                WriteLine();
            }
            else 
            {
                var g = false;
                var memo = 0;
                var ml = new List<char>();
                for (int i = s.Count-1; i >0; i--)
                {
                    if (s[i - 1] < s[i])
                    {
                        memo = i;
                        g = true;
                        break;
                    }
                }
               
                
                if (g)
                {
                    for (int i = memo; i < s.Count; i++)
                    {
                        ml.Add(s[i]);
                    }
                    ml.Sort();
                   

                    for (int i = 0; i <ml.Count ; i++)
                    {
                        if (s[memo - 1] < ml[i])
                        {
                            s[memo - 1] = ml[i];
                            break;
                        }
                    }
                    for (int i = 0; i < memo; i++)
                    {
                        Write(s[i]);
                    }
                    WriteLine();
                }
                else
                    WriteLine(-1);
            }
                



            Out.Flush();
        }
    }
}



Measured memory_bytes: 18460