             print("")
         }
     case "go":
+        print("\n")
         let boardRep = BoardBuilder.build(board)
-        let hand = think.think(color, board: boardRep, info: info)
-        if board.canPut(color, x: hand.col, y: hand.row) {
-            _ = board.put(color, x: hand.col, y: hand.row, guides: false, returnChanges: false)
-            return .Moved(board)
+        if (boardRep.isAnyPuttable(color)) {
+            let hand = think.think(color, board: boardRep, info: info)
+            if board.canPut(color, x: hand.col, y: hand.row) {
+                _ = board.put(color, x: hand.col, y: hand.row, guides: false, returnChanges: false)
+                let handStr = strFromMove(move: .Move(hand.col, hand.row))
+                print(">\(playerName) plays \(handStr)")
+                return .Moved(board)
+            } else {
+                // Treat invalid put by think as pass
+                print(">\(playerName) plays PS")
+                return .Moved(board)
+            }
         } else {
             // Treat invalid put by think as pass
+            print(">\(playerName) plays PS")
             return .Moved(board)
         }
     default:

    if edaxStr.uppercased() == "PS" {
        return .Pass
    } else {
        return handFromStr(str: edaxStr)
    }
}

public func handFromStr(str: String) -> Move {
    let b = str.uppercased()
    if let first = b.characters.first, let last = b.characters.last {
        var row = -1;

    return .Invalid
}

public func strFromMove(move: Move) -> String {
    switch move {
    case let .Move(col, row):
        var first = ""
        switch col {
        case 0:
            first = "A"
        case 1:
            first = "B"
        case 2:
            first = "C"
        case 3:
            first = "D"
        case 4:
            first = "E"
        case 5:
            first = "F"
        case 6:
            first = "G"
        case 7:
            first = "H"
        default:
            first = "X"
        }
        let last = String.init(row + 1)
        return first + last
    case .Pass:
        return "PS"
    case .Invalid:
        return "Invalid"
    }
}

public enum Move {
    case Move(Int, Int)     // col, row
    case Pass
