for (i=0; i < 17; i++)
        possible_total += possible[i];
 
-    printf ("%s\n", puzzle);
+    printf ("%s\n\n", puzzle);
     just_saw_puzzle = TRUE;
 
     remaining = time_limit_seconds;
        tv_stop.tv_sec += time_limit_seconds;
     } else {
        sprintf (prompt, "> ");
+       remaining = 1;
     }
     do {
        if (time_limit_seconds) {
            sprintf (prompt, "%02d:%02d ", minutes, seconds);
        }
        response = readline (prompt);
-       add_history (response);
+       if (response == NULL)
+           break;
        if (strlen (response) == 0) {
            if (! just_saw_puzzle) {
-               printf ("%s\n", puzzle);
+               printf ("%s\n\n", puzzle);
                just_saw_puzzle = TRUE;
            } else {
                for (i = 2; i <= 17; i++)
        } else {
            dict_entry_t *entry;
            just_saw_puzzle = FALSE;
+           add_history (response);
            if (response[strlen (response) - 1] == '\n')
                response[strlen (response) - 1] = '\0';
            entry = dict_lookup (answers, response);
        }
     } while (remaining > 0);
 
-    printf ("%s\n", puzzle);
+    printf ("%s\n\n", puzzle);
 
     printf ("Words you found:\n");
     dict_print_by_length_if (answers, seen_predicate);