import java.io.BufferedReader;
import java.io.InputStreamReader;

public class TandemRepeat_artur {

  static final int MAXN = 100100;
  static final int[] p1 = new int[MAXN];
  static final int[] p2 = new int[MAXN];
  static final int[] p3 = new int[MAXN];
  static final int[] p4 = new int[MAXN];

  static char[] a;
  static long count;

  public static void main(String[] args) throws Exception {
    BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

    while (true) {
      String s = in.readLine();
      if ("0".equals(s))
        break;

      a = s.toCharArray();
      count = 0;
      count(0, a.length);
      System.out.println(count);
    }
  }

  static void count(int l, int r) {
    int n = r - l;
    if (n <= 1)
      return;

    int x = n / 2, y = n - x, m = l + x;

    count(l, m);
    count(m, r);

    reverse(l, m);
    prefixes(l, m, p1);
    reverse(m, r);
    reverse(l, r);
    prefixes(l, r, p2);
    reverse(l, r);
    prefixes(l, r, p3);
    reverse(m, r);
    reverse(l, m);
    prefixes(m, r, p4);

    int len, i, j, temp = n - 1 + x;
    for (int k = 0; k < n; k++) {
      if (k < x) {
        len = x - k;
        i = len < x ? p1[len] : 0;
        j = y + k < n ? p2[y + k] : 0;
      } else {
        len = k - x + 1;
        i = temp - k < n ? p3[temp - k] : 0;
        j = len < y ? p4[len] : 0;
      }

      if (x < i)
        i = x;
      if (y < j)
        j = y;
      if (i + j >= len) {
        i = Math.min(i, k < x ? len - 1 : len);
        j = Math.max(len - j, 1);
        if (i > 0 && j <= i)
          count += i - j + 1;
      }
    }
  }

  static void prefixes(int l, int r, int[] p) {
    int n = r - l;
    for (int k = 1, i = 0, j = 0; k < n; k++)
      if (p[k - i] + k <= j)
        p[k] = p[k - i];
      else {
        i = k;
        if (k > j)
          j = k;
        for (p[k] = j - k; j < n && a[j + l] == a[p[k] + l]; j++, p[k]++)
          ;
        j--;
      }
  }

  static void reverse(int l, int r) {
    for (int i = l, j = r - 1; i < j; i++, j--) {
      char t = a[i];
      a[i] = a[j];
      a[j] = t;
    }
  }
}
