using System;
using System.Linq;
using System.Collections.Generic;
//using System.Numerics;
using Debug = System.Diagnostics.Debug;
using SB = System.Text.StringBuilder;
using Number = System.Int64;

namespace Program {
    public class Solver {
        const int n = 52;
        public void Solve() {
            var dic = new Dictionary<char, int>();
            for (char c = 'a'; c <= 'z'; c++) {
                dic[c] = dic.Count;
                dic[char.ToUpper(c)] = dic.Count;
            }
            for (; ; ) {
                var s = rs;
                if (s == "#") return;
                if (s.Length <= 2) {
                    Console.WriteLine("No Results");
                    continue;
                }
                var g = new int[n, n];
                for (int i = 0; i < s.Length - 1; i++)
                    g[dic[s[i]], dic[s[i + 1]]] = 1;
                var deg = new int[n];
                var cnt = 1;
                for (int i = 0; i < n; i++)
                    for (int j = 0; j < n; j++) {
                        if (g[i, j] == 0) continue;
                        deg[i]++; deg[j]--;
                        cnt++;
                    }
                var min = deg.Min();
                var fix = deg.Sum(x => Math.Abs(x));
                if (fix == 2 && cnt == s.Length) {
                    if (solve(deg, g)) Console.WriteLine(cnt);
                    else Console.WriteLine(cnt + 1);
                }
                else {
                    if (min < 0) fix -= 2;
                    Console.WriteLine(cnt + fix / 2);

                }

            }

        }

        bool solve(int[] deg, int[,] g) {
            Action<int, bool, List<int>> dfs = null;
            dfs = (p, flag, ret) => {
                var go = Enumerable.Range(0, n);
                if (flag) go = go.Reverse();
                foreach (var q in go) {
                    if (g[p, q] == 1) {
                        g[p, q]--;
                        dfs(q, flag, ret);
                    }
                }
                ret.Add(p);
            };
            for (int i = 0; i < n; i++)
                if (deg[i] == 1) {
                    var a = new List<int>();
                    var b = new List<int>();
                    var gg = g.Clone() as int[,];
                    dfs(i, false, a);
                    g = gg;
                    dfs(i, true, b);
                    Debug.WriteLine(a.AsJoinedString());
                    Debug.WriteLine(b.AsJoinedString());
                    for (int j = 0; j < a.Count; j++)
                        if (a[j] != b[j]) return true;
                }
            return false;

        }
        const long INF = 1L << 60;

        //int[] dx = { -1, 0, 1, 0 };
        //int[] dy = { 0, 1, 0, -1 };
        int ri { get { return sc.Integer(); } }
        long rl { get { return sc.Long(); } }
        double rd { get { return sc.Double(); } }
        string rs { get { return sc.Scan(); } }
        public IO.StreamScanner sc = new IO.StreamScanner(Console.OpenStandardInput());

        static T[] Enumerate<T>(int n, Func<int, T> f) {
            var a = new T[n];
            for (int i = 0; i < n; ++i) a[i] = f(i);
            return a;
        }

        static public void Swap<T>(ref T a, ref T b) {
            var tmp = a;
            a = b;
            b = tmp;
        }
    }
}

#region main

static class Ex {
    static public string AsString(this IEnumerable<char> ie) {
        return new string(ie.ToArray());
    }

    static public string AsJoinedString<T>(this IEnumerable<T> ie, string st = " ") {
        return string.Join(st, ie.Select(x => x.ToString()).ToArray());
        //return string.Join(st, ie);
    }

    static public void Main() {
        Console.SetOut(new System.IO.StreamWriter(Console.OpenStandardOutput()) { AutoFlush = false });
        var solver = new Program.Solver();
        solver.Solve();
        Console.Out.Flush();
    }
}

#endregion
#region Ex

namespace Program.IO {
    using System.IO;
    using System.Text;
    using System.Globalization;

    public class Printer: StreamWriter {
        public override IFormatProvider FormatProvider {
            get { return CultureInfo.InvariantCulture; }
        }
        public Printer(Stream stream) : base(stream, new UTF8Encoding(false, true)) { }
    }

    public class StreamScanner {
        public StreamScanner(Stream stream) {
            str = stream;
        }

        public readonly Stream str;
        private readonly byte[] buf = new byte[1024];
        private int len, ptr;
        public bool isEof = false;
        public bool IsEndOfStream {
            get { return isEof; }
        }

        private byte read() {
            if (isEof) return 0;
            if (ptr >= len) {
                ptr = 0;
                if ((len = str.Read(buf, 0, 1024)) <= 0) {
                    isEof = true;
                    return 0;
                }
            }
            return buf[ptr++];
        }

        public char Char() {
            byte b = 0;
            do b = read(); while ((b < 33 || 126 < b) && !isEof);
            return (char)b;
        }

        public string Scan() {
            var sb = new StringBuilder();
            for (var b = Char(); b >= 33 && b <= 126; b = (char)read()) sb.Append(b);
            return sb.ToString();
        }

        public string ScanLine() {
            var sb = new StringBuilder();
            for (var b = Char(); b != '\n' && b != 0; b = (char)read()) if (b != '\r') sb.Append(b);
            return sb.ToString();
        }

        public long Long() {
            return isEof ? long.MinValue : long.Parse(Scan());
        }

        public int Integer() {
            return isEof ? int.MinValue : int.Parse(Scan());
        }

        public double Double() {
            return isEof ? double.NaN : double.Parse(Scan(), CultureInfo.InvariantCulture);
        }
    }
}

#endregion


#region DisjointSet
public class DisjointSet {
    int[] par;
    byte[] rank;
    public DisjointSet(int n) {
        par = new int[n];
        for (int i = 0; i < n; i++)
            par[i] = -1;
        rank = new byte[n];
    }
    public int this[int id] {
        get {
            if ((par[id] < 0)) return id;
            return par[id] = this[par[id]];
        }
    }
    public bool Unite(int x, int y) {
        x = this[x]; y = this[y];
        if (x == y) return false;
        if (rank[x] < rank[y]) { var z = x; x = y; y = z; }
        par[x] += par[y];
        par[y] = x;
        if (rank[x] == rank[y])
            rank[x]++;
        return true;
    }
    public int Size(int x) { return -par[this[x]]; }
    public bool IsUnited(int x, int y) { return this[x] == this[y]; }

}
#endregion


Measured memory_bytes: 10992