Problem:
MathJax.Hub.Config({ tex2jax: { inlineMath: [["$","$"], ["\\(","\\)"]], processEscapes: true }});

blockquote {
font-family: Menlo, Monaco, "Courier New", monospace;
color: #333333;
display: block;
padding: 8.5px;
margin: 0 0 9px;
font-size: 12px;
line-height: 18px;
background-color: #f5f5f5;
border: 1px solid #ccc;
border: 1px solid rgba(0, 0, 0, 0.15);
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
border-radius: 4px;
white-space: pre;
white-space: pre-wrap;
word-break: break-all;
word-wrap: break-word;
}

Problem Statement

We can describe detailed direction by repeating the directional names: north, south, east and west. For example, northwest is the direction halfway between north and west, and northnorthwest is between north and northwest.

In this problem, we describe more detailed direction between north and west as follows.

"north" means $0$ degrees.

"west" means $90$ degrees.

If the direction $dir$ means $a$ degrees and the sum of the occurrences of "north" and "west" in $dir$ is $n$ ($\geq$ 1),
"north"$dir$ (the concatenation of "north" and $dir$) means $a - \frac{90}{2^n}$ degrees and "west"$dir$ means $a + \frac{90}{2^n}$ degrees.

Your task is to calculate the angle in degrees described by the given direction.

Input

The input contains several datasets. The number of datasets does not exceed $100$.

Each dataset is described by a single line that contains a string denoting a direction.
You may assume the given string can be obtained by concatenating some "north" and "west",
the sum of the occurrences of "north" and "west" in the given string is between $1$ and $20$, inclusive,
and the angle denoted by the given direction is between $0$ and $90$, inclusive.
The final dataset is followed by a single line containing only a single "#".

Output

For each dataset, print an integer if the angle described by the given direction can be represented as an integer, otherwise print it as an irreducible fraction. Follow the format of the sample output.

Sample Input

north
west
northwest
northnorthwest
westwestwestnorth
#

Output for the Sample Input

0
90
45
45/2
315/4

Solution in JAVA (judge verdict: Accepted)

import java.io.IOException;
import java.util.InputMismatchException;

public class Main {
	class Fraction {
		long numerator;
		long denominator;

		Fraction(long numerator, long denominator) {
			this.numerator = numerator;
			this.denominator = denominator;
			reduce();
		}

		Fraction(int k) {
			this.numerator = k;
			this.denominator = 1;
		}

		Fraction add(Fraction x) {
			long a = this.denominator;
			long b = this.numerator;
			long c = x.denominator;
			long d = x.numerator;
			Fraction res = new Fraction(b*c + a*d, a*c);
			res.reduce();
			return res;
		}

		Fraction sub(Fraction x) {
			long a = this.denominator;
			long b = this.numerator;
			long c = x.denominator;
			long d = x.numerator;
			Fraction res = new Fraction(b*c - a*d, a*c);
			res.reduce();
			return res;
		}

		Fraction multiple(Fraction x) {
			long a = this.denominator;
			long b = this.numerator;
			long c = x.denominator;
			long d = x.numerator;
			Fraction res = new Fraction(b*d, a*c);
			res.reduce();
			return res;
		}

		Fraction devide(Fraction x) {
			long a = this.denominator;
			long b = this.numerator;
			long c = x.denominator;
			long d = x.numerator;
			Fraction res = new Fraction(b*c, a*d);
			res.reduce();
			return res;
		}

		void reduce() {
			long gcd = gcd(numerator, denominator);
			this.numerator /= gcd;
			this.denominator /= gcd;
			if (this.denominator < 0) {
				this.numerator *= -1;
				this.denominator *= -1;
			}
		}

		long gcd(long a,long b) {
			a = Math.abs(a);
			b = Math.abs(b);
			while (a != 0 && b != 0) {
				if (a > b) a %= b;
				else b %= a;
			}
			if (a == 0) return b;
			return a;
		}

		public String toString() {
			String res = "" + numerator;
			if (denominator != 1) res += "/" + denominator;
			return res;
		}
	}

	void run() {
		MyScanner sc = new MyScanner();

		while (true) {
			char[] s = sc.next().toCharArray();
			if (s[0] == '#') {
				break;
			}
			int id = 0;
			int[] a = new int[20];
			for (int i = 0; i < s.length; i++) {
				if (s[i] == 'n') {
					a[id++] = 0;
					i += 4;
				} else {
					a[id++] = 1;
					i += 3;
				}
			}

			Fraction ans;
			if (a[id - 1] == 0) {
				ans = new Fraction(0);
			} else {
				ans = new Fraction(90);
			}

			int tmp = 1 << 1;
			for (int i = id - 2; 0 <= i; i--) {
				Fraction f = new Fraction(90, tmp);
				if (a[i] == 0) f.numerator *= -1;
				ans = ans.add(f);
				tmp = tmp << 1;
			}

			System.out.println(ans);
		}
	}

	public static void main(String[] args) {
		new Main().run();
	}

	public void mapDebug(int[][] a) {
		System.out.println("--------map display---------");
		for (int i = 0; i < a.length; i++) {
			for (int j = 0; j < a[i].length; j++) {
				System.out.printf("%3d ", a[i][j]);
			}
			System.out.println();
		}
		System.out.println("----------------------------" + '\n');
	}

	class MyScanner {
		int read() {
			try {
				return System.in.read();
			} catch (IOException e) {
				throw new InputMismatchException();
			}
		}

		boolean isSpaceChar(int c) {
			return c == ' ' || c == '\n' || c == '\r' || c == '\t' || c == -1;
		}

		boolean isEndline(int c) {
			return c == '\n' || c == '\r' || c == -1;
		}

		int nextInt() {
			return Integer.parseInt(next());
		}

		int[] nextIntArray(int n) {
			int[] array = new int[n];
			for (int i = 0; i < n; i++)
				array[i] = nextInt();
			return array;
		}

		long nextLong() {
			return Long.parseLong(next());
		}

		long[] nextLongArray(int n) {
			long[] array = new long[n];
			for (int i = 0; i < n; i++)
				array[i] = nextLong();
			return array;
		}

		double nextDouble() {
			return Double.parseDouble(next());
		}

		double[] nextDoubleArray(int n) {
			double[] array = new double[n];
			for (int i = 0; i < n; i++)
				array[i] = nextDouble();
			return array;
		}

		String next() {
			int c = read();
			while (isSpaceChar(c))
				c = read();
			StringBuilder res = new StringBuilder();
			do {
				res.appendCodePoint(c);
				c = read();
			} while (!isSpaceChar(c));
			return res.toString();
		}

		String[] nextStringArray(int n) {
			String[] array = new String[n];
			for (int i = 0; i < n; i++)
				array[i] = next();

			return array;
		}

		String nextLine() {
			int c = read();
			while (isEndline(c))
				c = read();
			StringBuilder res = new StringBuilder();
			do {
				res.appendCodePoint(c);
				c = read();
			} while (!isEndline(c));
			return res.toString();
		}
	}
}