Shortest Unique Substrings Input

An alphanumeric string s.

Output

The shortest string that occurs exactly once as a (contiguous) substring in s.
Overlapping occurrences are counted as distinct.
If there are several candidates of the same length, you must output all of them in the order of occurrence.
In this challenge, the empty string occurs n + 1 times in a string of length n.

Example

Consider the string

"asdfasdfd"


The empty string occurs 10 times in it, so it is not a candidate for unique occurrence.
Each of the letters "a", "s", "d", and "f" occurs at least twice, so they are not candidates either.
The substrings "fa" and "fd" occur only once and in this order, while all other substrings of length 2 occur twice.
Thus the correct output is

["fa","fd"]


Rules

Both functions and full programs are allowed, and standard loopholes are not.
The exact formatting of the output is flexible, within reason.
In particular, producing no output for the empty string is allowable, but throwing an error is not.
The lowest byte count wins.

Test cases

"" -&gt; [""]
"abcaa" -&gt; ["b","c"]
"rererere" -&gt; ["ererer"]
"asdfasdfd" -&gt; ["fa","fd"]
"ffffhhhhfffffhhhhhfffhhh" -&gt; ["hffff","fffff","hhhhh","hfffh"]
"asdfdfasddfdfaddsasadsasadsddsddfdsasdf" -&gt; ["fas","fad","add","fds"]


Leaderboard

Here's the by-language leaderboard that I promised.

To make sure that your answer shows up, please start your answer with a headline, using the following Markdown template:

# Language Name, N bytes


where N is the size of your submission. If you improve your score, you can keep old scores in the headline, by striking them through. For instance:

# Ruby, &lt;s&gt;104&lt;/s&gt; &lt;s&gt;101&lt;/s&gt; 96 bytes




&lt;script src='https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js'&gt;&lt;/script&gt;&lt;script&gt;site = 'meta.codegolf',postID = 5314,isAnswer = true,QUESTION_ID = 45056;jQuery(function(){var u='https://api.stackexchange.com/2.2/';if(isAnswer)u+='answers/'+postID+'?order=asc&amp;sort=creation&amp;site='+site+'&amp;filter=!GeEyUcJFJeRCD';else u+='questions/'+postID+'?order=asc&amp;sort=creation&amp;site='+site+'&amp;filter=!GeEyUcJFJO6t)';jQuery.get(u,function(b){function d(s){return jQuery('&lt;textarea&gt;').html(s).text()};function r(l){return new RegExp('&lt;pre class="snippet-code-'+l+'\\b[^&gt;]*&gt;&lt;code&gt;([\\s\\S]*?)&lt;\\/code&gt;&lt;\/pre&gt;')};b=b.items[0].body;var j=r('js').exec(b),c=r('css').exec(b),h=r('html').exec(b);if(c!==null)jQuery('head').append(jQuery('&lt;style&gt;').text(d(c[1])));if (h!==null)jQuery('body').append(d(h[1]));if(j!==null)jQuery('body').append(jQuery('&lt;script&gt;').text(d(j[1])))})})&lt;/script&gt;
Python 3, 124 123 111 96 bytes
f=lambda s,n=1:[x for x in[s[i:i+n]for i in range(len(s)+1)]if s.find(x)==s.rfind(x)]or f(s,n+1)

Looks for strings such that the first occurrence from the left is the same as the first occurrence from the right. The +1 in the range is to accommodate for the empty string case.
Now if only Python had a .count() which counted overlapping matches, then this would have been a fair bit shorter.