import std.stdio, std.conv, std.math, std.string, std.range, std.array, std.algorithm; //return ULL nCr {(n,r)|n,r ∈ (int)} ulong combination(int n, int r){ if (r == 0) return 1; if (r > n/2) return combination(n,n-r); ulong ret=1; for (int i = 1; i <= r; ++i) ret = ret*(n-i+1)/i; return ret; } void main(){ int[] a; a.length = 26; foreach(immutable int i; 0 .. 26) { a[i] = readln().strip().to!int(); } write(a['h'-'a'], ","); write(a['e'-'a'], ","); write(a['l'-'a'], ","); write(a['o'-'a'], ","); write(a['w'-'a'], ","); write(a['r'-'a'], ","); write(a['d'-'a'], ","); writeln(); ulong l; foreach(immutable int i; 1 .. a['l'-'a']-1) { l = max((combination(a['l'-'a']-i, 2) * i).to!int, l); } ulong o; if(a['o'-'a']%2 == 1) { o = (a['o'-'a']/2 + 1) * (a['o'-'a']/2); } else { o = (a['o'-'a']/2)^^2; } (a['h'-'a'].to!ulong * a['e'-'a'] * l * o * a['w'-'a'] * a['r'-'a'] * a['d'-'a']).writeln(); }